面向对象
2020-04-27 11:13:18 0 举报
AI智能生成
python面向对象
作者其他创作
大纲/内容
类的结构
第一部分 静态属性
私有静态属性 __变量名
公有静态字段
第二部分 动态方法
实例方法:func(self)通过对象调用
私有方法__函数名,类内部调用
属性@property:将方法伪装成属性,为了更合理
@property
@func.setter
@func.deleter
特殊方法
__str__
__len__
__repr__
__call__
__hash__
__eq__
__del__
__init__
__new__
class A:
__a = None
def __new__():
if not cls.__a:
cls.__a = object.__new__(cls)
return cls.__a
__a = None
def __new__():
if not cls.__a:
cls.__a = object.__new__(cls)
return cls.__a
单例模式作用:减少内存
__item__系列
__enter__ __exit__
__iter__
类方法
@classmethod:类名去调用,他会将类空间传给cls
类方法的作用:就是想要类名调用,去操控这个公共模板的内容(属性,方法)
静态方法
@staticmethod:不用传入类空间,对象空间的方法
私有成员
类的成员按照公有私有分为2种:私有成员 公有成员
私有成员分为3种
私有方法
私有属性
私有静态属性
私有成员:只可以在类中访问,不能在类外部以及派生类访问
空间,以及查找顺序
类名()会产生一个对象空间,此空间有对象指针,对象可以通过这个类对象指针找到从属的类
对象查询属性:先从对象空间去找,对象空间没有,通过指针去所属类去找
类查找顺序先从本类去找,如果没有从父类去找
类与类之间的关系
类与类之间原本没有关系,但是为了程序的扩展,增加代码之间耦合性,可以让类产生关系
依赖关系
依赖关系是类与类之间耦合性最低的关系,就是将一个类的类名或者对象传入到另一个类的方法中
组合关系
给一个类的对象封装一个属性,这个属性是另个类的对象
继承关系
类的约束
方式1 提取父类,然后在父类中定义好方法,在这个方法中什么都不干就抛一个异常就可以了,这样所有的子类必须重写这个方法,否则,访问的时候报错
方式2 使用元类来描述父类,在父类中给出一个抽象方法,这样子类就不得不给出抽象方法的具体实现,也可以起到约束的效果
函数和方法的区分
显性传参就是函数
隐形传参就是方法
类,对象的含义
类:具有相同属性和方法的一类事物
对象:类的具体表现
类名
类名.__dict__ 返回类的所有信息
类名.公有静态属性 增删改查
可以在外部,内部,派生类进行操作
类名.方法 一般直接调用(类方法 静态方法)
面向对象的三大特性
继承
继承的优点
1 提高代码的复用性
2 提高代码的维护性
3 让类和类产生关系,使得代码更具关联性,增加耦合性
继承的缺点
类的耦合性增强了
单继承
执行父类的静态变量
如果子类没有同名变量则可以直接,寻找
如果子类有存在与父类同名的静态变量则通过super().area,或者直接父类.变量名的方法查找
在子类中即执行本类有执行父类的方法
父类名.方法(self,父类此方法所需参数)
super().方法名(父类所需参数)
只执行父类的方法:子类中不能定义同名的方法
多继承
经典类:深度优点,一条路走到底
新式类:C3算法,通过mro方法可以查出父类的继承顺序
封装
给类中封装多个属性和方法
多态
python默认支持多态:即一个变量可以代指不同的类型,不用规定死,比如函数的形参func(a):对于形参a来说,它可以代指任意数据类型
python崇尚鸭子类型:长得像鸭子,他就是鸭子
子主题
一个事物,多种形态
为什么要有面向对象
对象
1 如何产生一个对象:类名() 实例化过程
2 实例化过程发生了3件事
1 类名()自动执行object类中的__new__方法,产生并返回一个对象空间
2 之后执行__init__方法 将对象空间传给self
3 在__init__方法,给这个对象空间封装属性
3 对象查询对象的所有属性:obj.__dict__
4 对象操作对象属性(增删改查)obj.属性名
5 对象查询类中的静态变量:obj.变量名
6 对象可以调用类的实例方法obj.函数名(self)
反射
本质:用字符串操作一个对象
本模块
对象
类
其他模块
4个方法
hasattr
getattr
setattr
delattr
0 条评论
下一页