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