面向对象知识梳理图
2022-06-25 15:24:17 10 举报
AI智能生成
面向对象知识总结梳理
作者其他创作
大纲/内容
类的结构
第一部分:静态字段(静态变量)
私有静态字段:_变量名
共有静态字段
第二部分:动态方法
实例方法:func(self),通过对象调用
私有方法:_函数名,类内部调用
属性:@property:将方法伪装成属性,为了更合理
特殊方法
__init__ :初始方法,此方法主要给对象封装属性
__new__ :构造方法产生并返回对象的方法,通过类名+()触发
__call__ 方法:通过实例化的对象()触发
__item__系列
__getitem__:obj["name"]就会触发__getitem__方法,将“name”传入此方法中
__settiem__
__delitem__
__len__ 方法:len(对象)触发
__hash__方法:hash(对象)触发
__str__方法:print(对象)或者str(对象)或者格式化输出'%s'%对象 触发
__repr__ 方法:repr(对象)或者格式话输出'%s'%对象 触发
__ep__ 方法:对象 == 对象 触发
上下文管理器相关,对一个对象进行with操作时触发这两个方法
__enter__方法
__exit__ 方法
代码实例
类方法
@classmethod(cls):类名去调用,他会将类空间穿个sls
类方法的左右:就是想要类名调用,去操控这个公共模板的内容(属性,方法等)
静态方法
@staticmethod():不用传入类名,对象空间的方法
私有成员
类的成员按照共有私有可以分为两种:公有成员,私有成员
私有成员分为三种
私有类的静态属性
私有对象属性
私有方法
代码实例
私有成员:只可以在类中访问,不能在类外部以及派生类中访问
空间,以及查找顺序
类名()会产生一个对象空间obj,此空间中有对类对象指针,对象可以通过这个类对象指针找到从属的类
对象会查询属性:先从对象空间去找,对象空间没有,通过类对象指针去从属的类去找
类的查找顺序:先从本类去找,如果没有去父类去找.......
类与类之间的关系
类与类之间原本灭有关系,但是为了程序的拓展,增加代码之间的耦合性,可以让类与类之间产生关系。
依赖关系是类与类之间耦合度最低的关系,就是将一个类的类名或者对象传给另一个类的方法中 依赖关系
给一个类的对象封装一个属性,这个属性就是另个类的对象 关联,聚合,组合关系
实现也是继承关系,这个会在面向对象三大特性中详细说明
类的约束
方式一:提取父类,然后在父类中定义好方法,在这个方法中什么都不用干,就抛一个异常就行,这样所有的子类必须按照你定义的这个方法来不然访问的时候就会报错
方法二:使用元类描述父类,再父类中给出i一个抽象方法,这样类就不得不给抽象方法的具体实现,也可以起到约束作用
类对象的定义
类具有相同属性和方法的一类事务
对象类的具体表现
类名
查询类中的所有内容(静态属性(变量),动态属性方法等):类名:__dict__
操作类中的某个共有的静态属性(变量):类名,字段名称
1.通过万能的点 对类的属性进行增删改查
2.可以在类外部,内部,派生类中进行操作
执行类中的方法:一般是通过类名可以调用类方法,和静态方法
面向对象的三大特性:
继承
单继承
执行父类的静态变量
如果子类中没有同名变量则可以直接,寻找
如果子类有存与父类同名的静态变量则通过super().area或者直接父类变量名的方法查找
在子类中及执行本类又执行父类的方法
父类名.方法名(self.父类此方法所需要参数)
super().方法名(父类此方法所需参数)
只执行父类的方法:子类中不能定于同名的方法
多继承
经典类:深度优先算法,一条路走到黑没有回头路
新式类:c3算法通过mro方法可以查出父类的继承顺序, 新式类的继承具体算法继承连接:https://www.cnblogs.com/jin-xin/articles/10274734.html
继承的优点
1:提高代码的复用性
2:提高代码的维护性
3:让类与类之间产生关系,是代码更具有关联性,增加耦合性(双刃剑)
继承的缺点
类的耦合性更加强了
封装
给对象封装属性
子主题
给一个类封装静态变量及方法
子主题
私有成员:私有静态字段,私有方法,私有属性,:_变量
私有成员:类只要加载到内存,他会将所有的私有成员的变成:_类名,_变量名
何处调用:只能在类内部调用,不能在派生类或者类外部调用
多态
python默认支持多态,即一个变量课义指代不同的类型,不用规定死,比如函数的形参function(a)对于形参a来说,它可以指代任意数据类型
python崇尚鸭子类型:长得像鸭子就是鸭子
为什么有面向对象
1:面向对象是将相关的功能(函数)的集合,让代码更加合理的分类
2:站在上帝的角度去思考问题,它实际是构造了一个公告模板,通过这个模板实例化多个对象,使用代码更具有多样性,规范性
对象
1:如何产生有个对象:类名() 实例化过程
实例化一个对象发生了三件事
1:类名()自动执行object类中的__new__方法,产生并返回一个对象空间
2:执行__init__ 方法,将对象传给self
3:在执行__ inti__ 方法中给对象封装基础属性
3:对象查询对象的所有属性:obj.__dict
4:对象操作对象属性(曾删改查):obj1.属性名
5:对象查询类中的静态变量:obj1.变量名
6:对象可以调用类中的实例方法:obj1.函数名(self)
0 条评论
下一页