第四章 面向对象

第四章 面向对象

  1. 基本格式

    定义:当函数(业务功能)比较多,可以使用面向对象来进行归类,如果有一个凡事使用的公共值,也可以放到对象中

#格式&关键字
class 类名:def __inti__(self,x)self.x = xdef 方法名(self,name):print(self.name)
v1 = 类(666)
v1.方法('Parallel')#存储一些值,方便之后使用
clas Foo:def __intit__(self,n,a,g):self.name = nself.age = aself.gender = gdef show(self):temp = '我是%s,年龄%s,性别%s'%(self.name,self.age,self.gender,)print(temp)
p = Person('Parallrl',18,'')    #类()实例化对象,自动执行此类中的__init__方法
p.show()

  2. 三大特性

    2.1 封装

      定义:将同一类的函数或重复使用的公共值封装佛奥同一个类中,方便以后使用

    2.2 继承

      定义:创建一个子类的对象,执行对象.方法时,优先在自己的类中找,如果没有就在父类中找,多个类中如果有公共的方法,可以放在基类中

      注:继承关系的查找顺序,要注意self到底是哪个类创建的,就从此类开始找

#继承
class Base:    父类(基类)def f1(self):pass
class Foo(Base):    子类(派生类)def f2(self):pass
obj = Foo()  

  3. 类成员

    方法(绑定方法/普通方法):至少有一个self参数,先创建对象,由对象.方法()执行

    类方法:@classmethod,至少有一个参数cls,类.类方法()执行

    静态方法:@staticmethod,参数无限制可以不传参,可以不创建对象类.静态方法名()执行

    类变量:写在类的下一级,和方法同级,类/对象.类变量名称调用

    属性:@property,把方法编程属性,出去了self不能有其他参数,用对象.属性名调用,不需要加()

  4. 成员修饰符

    定义:公有&私有

#公有变量和私有变量    
class Foo:def __init__(self,name):self.name = name    #公共的self._name = name    #私有的def func(self):print(self,name)
obj = Foo('alex')
print(obj.name)
print(obj.__name)    #外部访问不到#访问私有变量
class Foo:def __init__(self,name):self.__x = name
obj = Foo('alex')
print(obj._Foo__x)    #强制访问私有实例变量

  5. 特殊成员

#__init__:初始化方法,用于给对象赋值(默认执行)#__new__:构造空对象,比__inti__优先执行#__call__:可以用类()()直接执行call方法#__getitem__/__setitem__/__delitem__
class Foo:def __setitem__(self,key,value):print(key,value)def __getitem__(self,item):print(item)###xxxdef __delitem__(self,key):print(key)###ttt
obj1 = Foo()
obj1['k1'] = 123#内部会自动调用__setitem__方法
val = obj1['xxx']    #内部会自动调用__getitem__方法
print(val)
del obj1['ttt']#内部会自动调用__delitem__方法#__str__:打印一个对象,当__str__返回什么,对象就打印什么
class Foo(object):def __str__(self):return 'sdsdsa'
obj = Foo()
print(obj)    #打印的是对象,类型也是对象,但答应出来的是sdsdsa#__dict__:将要找的元素编程字典格式
class Foo(object):def __init__(self,name,age,email):self.name = nameswf.age = ageself.email = email
obj = Foo('alex',19,'xxx@qq.com')
val = obj.__dice__#去对象中找到所有变量转换为字典
print(val)    #{'name':'alex','age':19}#__enter__/__exit__:文件上下文管理
class Foo(object):def __enter__(self):self.x = open('a.txt',mode='a',encoding='utf-8')return self.xdef __exit__(self,exc_type,exc_val,exc_tb):self.x.close()
with Foo() as ff:ff.write('alex')#对象互相加减乘除    
class Foo(object):def __add__(self,other):pass
obj1 = Foo()
obj2 = Foo()
val = obj1 +obj2###触发add,前面触发,前面为self,后面为other

  6. 嵌套

    定义:面向对象可以当参数嵌套到函数中,类(Foo)可以为key对象(obj)可以做key

class Dream(object):def __init__(self,title,addr):self.title = titleself.address = addrclass House(object):def __init__(self,name,dream_object):self.name = nameself.dream =dream_objects1 = Dream('北京','沙河')
s2 = Dream('上海','浦东')
s3 = Dream('深圳','南山')c1 = House('Parallel',s1)
c1.name
c1.dream.title
c1.dream.address

  7. 反射

#根据字符串的形式去某个对象中操作他的成员
class Foo:def login(self):pass
obj = Foo()
func_name = input('请输入方法名:')
getattr(obj,func_name)()    #找到方法并执行#根据字符串的形式去某个对象中判断是否有该成员
class View(object):def login(self):return '登陆'def logout(self):return '登出'def index(self):return '首页'
obj = View()
func_name = input('请输入方法名:')
if not hasattr(obj,func_name):print('输入错误')
getattr(obj,func_name)()#根据字符串的形式去某个对象中设置成员
class Foo:pass
obj = Foo()
setattr(obj,'k1','123')    #obj.k1 = '123'    #设置对象成员
print(obj.k1)#根据字符串的形式去某个对象中删除成员
class Foo:k1 = 999
obj = Foo()
delattr(obj,'k1')

  8. 内置函数

    issubclass:判断某个类是否是某个类的子类  print(issubclass(子类,父类))  返回布尔值

    isinstance:判断对象是否是某个类或该类基类的实例  print(isinstance(obj,Foo))  判断obj是否是Foo或Foo基类的实例  返回布尔值

    super:根据self对象所属类的继承关系,按顺序挨个找并执行,默认找到第一个就不找了  v = super().xx()

  9. 单例模式

    定义:无论实例化多少次,都是用第一次创建的那个对象

class Foo(Object):instance = Nonedef __new__(cls,*args,**kwargs):if not instance:cls.instance = object.supper().__new__(cls)return cls.instance
obj1 = Foo()
obj2 = Foo()    #不管启动多少个Foo内存地址都指向obj1

转载于:https://www.cnblogs.com/parallel-Y/p/10921670.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448892.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷P2347 砝码称重 某一年noip提高组原题

可以转化为01背包求方案数的问题&#xff0c;dp数组f[][]表示第几个砝码能称出的重量,可压缩至一维 转移方程为f(i,j)f(i-1,j-w[i]) 当前我们可以称出的重量必定是由之前的砝码重量转移过来的 #include<bits/stdc.h> using namespace std; const int N550; const int max…

解决:-bash: unzip: command not found (Linux 中 unZip/Zip 的安装及使用)

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Linux系统没有自带的压缩解压工具&#xff1b;需要我们自己安装&#xff1b; 当用到zip或者unzip如果没有安装就会出现 unzip: Command…

云计算时代IT专业人员需具备的10项技能

摘要&#xff1a;IT专业人员需要不断的学习&#xff0c;才能确保自己的工作能力跟上时代的步伐。云时代IT专业人员不仅需要具备一定的专业技能&#xff0c;比如快速运用自身知识快速在互联网上构建应用程序&#xff0c;还必须具备商业、金融、业务需求分析等等。 【编者按】谈…

java自定义注解学习笔记

注解学习笔记之自定义注解 Target&#xff08;{1,2,3,4,5,6,7}&#xff09; 1.ElementType.CONSTRUCTOR:用于描述构造器2.ElementType.FIELD:用于描述域3.ElementType.LOCAL_VARIABLE:用于描述局部变量4.ElementType.METHOD:用于描述方法5.ElementType.PACKAGE:用于描述包6.Ele…

[xsy3132]数表

题意&#xff1a;一个$n\times m$的数表&#xff0c;数值$\in[0,4)$&#xff0c;你可以任意次选择一行或一列$1,\text{mod }4$&#xff0c;要最小化所有数的和 因为$n\leq10$&#xff0c;所以数表可以看成$m$个$n$位$4$进制数$a_{1\cdots m}$&#xff0c;以下使用不进位加法 定…

linux 下载、安装 maven

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 创建maven的文件夹并下载maven的tar包到此文件夹中 //进入一个目录 cd /usr/local//创建一个文件夹 mkdir maven//下载maven的tar包…

ELK4之进阶学习

1.精确查找和模糊查找(term和match的区别) match经过分析(analyer)的, term是不经过分词,直接去倒排索引中查找精确的值. 2.建议器的简介(最左前缀或者自带的做) (1)直接用现成的 (2)不只是纠错,还有建议等等. (3)优点:用户体验,服务器减少请求(减少压力,太耗电了,热量太大) (4…

女人必知 教你认清6种隐性坏男人

周围不乏有女朋友喜欢历数往事、追忆曾擦肩而过的男人&#xff0c;有的说如果不是自己太苛求提早要见他家人引起反感&#xff0c;早就和心爱的人俪影双双甜蜜快乐了&#xff0c;还有的说暗恋的男生那一夜向他表露情感、她万分感动、可男生最后提出上床她拒绝了、因而错失了一段…

c# 编程学习(二)

2019独角兽企业重金招聘Python工程师标准>>> 标识符是对程序中的各个元素进行标识的名称。  只能使用字母(大写和小写)、数字和下划线  标识符必须以字母或下划线开头 变量是容纳值的存储位置。可将变量想象成容纳临时信息的容器 命名变量的建议&#xff1a; …

linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Linux 下使用 nohup Unix/Linux下一般比如想让某个程序在后台运行&#xff0c;很多都是使用 & 在程序结尾来让程序自动运行。 …

PowerDesigner表结构和字段大小写转换

原文&#xff1a;https://www.cnblogs.com/zhzhang/p/3946609.html 【转】PowerDesigner表结构和字段大小写转换 【转自】http://blog.csdn.net/xysh1991/article/details/8016192 使用方法&#xff1a;进入PowerDesigner&#xff0c;打开一个PDM&#xff0c;在菜单栏找到&…

解决:Could not find or load main class org.apache.rocketmq.example.quickstart.Producer

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1.情景描述 &#xff1a;我只是想安装运行 rocketmq&#xff0c;执行命令&#xff1a; sh bin/tools.sh org.apache.rocketmq.example.…

深入理解C++ 虚函数表

目录 深入理解C 虚函数表虚函数表概述单继承下的虚函数表派生类未覆盖基类虚函数派生类覆盖基类虚函数多继承下的虚函数表无虚函数覆盖派生类覆盖基类虚函数钻石型虚继承总结几个原则安全性问题深入理解C 虚函数表 ​ C中的虚函数的作用主要是实现了多态的机制。关于多态&#…

react-native-baidu-map使用及注意问题

使用组件&#xff1a; react-native-baidu-map 获取百度地图API_KEY 地址&#xff1a;lbsyun.baidu.com&#xff0c;在控制台成功创建应用后&#xff0c;就可以看到应用的api key了 安装 yarn add react-native-baidu-map 复制代码原生部分 Android配置 react-native link reac…

简单扫清身体垃圾

“我们的身体在被‘设计’之初&#xff0c;就拥有了自主扫除体内垃圾的功能。只不过&#xff0c;这需要我们按照正确的方法去激发它 。”美国畅销书作者乔斯卡曼和朱莉佩莱斯&#xff0c;在她们去年合著的《自我清洁》一书中强调了养成良好生活习惯可为身体排毒的重要性。 近日…

linux (阿里云 CentOS7) 中安装配置 RocketMQ

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 JDK1.8的安装&#xff1a; 1.检查系统的JDK版本 根目录下操作&#xff1a;cd java -version 2.检测JDK安装包 rpm -qa | grep ja…

Bootstrap简介

1.使用准备 1.1 Bootstrap的下载 http://www.bootcss.com&#xff0c;下载用于生产环境的Bootstrap即可。 1.2 Bootstrap包含的内容 ● 全局CSS&#xff1a;基本的 HTML 元素均可以通过 class 设置样式并得到增强效果&#xff1b;还有先进的栅格系统。 ● 组件&#xff1a;无数…

用TortoiseGit时的实用git命令

生成并获取 sshkey&#xff1a; ssh-keygen -t rsa -C "xxxxxxxxxx.com" cat ~/.ssh/id_rsa.pub 克隆仓库&#xff1a; git clone xxxxxx/xxx.git 重命名文件&#xff1a; mv file_name new_file_name git目录区分大小写&#xff1a; git config core.ignorecase fal…

有一种失败叫瞎忙

很多时候&#xff0c;我们都在不知不觉的瞎忙&#xff0c;为了避免这样的瞎忙&#xff0c;特为大家分享一个小的故事。 在一个山谷的禅房里有一位老禅师&#xff0c;他发现自己有一个徒弟非常勤奋&#xff0c;不管是去化缘&#xff0c;还是去厨房洗菜&#xff0c;这个徒弟从…

解决:org.apache.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 原因1&#xff1a;启动 broker 方式不对。 我完全是按照官方文档操作的&#xff0c;在网上看到说这一步是错误的启动 broker 方式&#…