@property 属性: 将一个方法伪装成一个属性,在代码的级别上没有本质的提升,但是让其看起来更合理
将 property 函数用作装饰器可以很方便的创建只读属性
@属性名.setter 装饰器 可被类外的 赋值指令 自动触发,通常用作对私有属性赋值
@属性名.deleter 装饰器,可被类外的 del 指令自动触发,通常用作对私有属性删除
@classmethod 类方法装饰器
类方式:通过类名调用的方法,类方法中第一个参数约定俗成为 cls,python自动将类名(类空间)传给cls
对象调用类方法时,cls得到的是该对象的所属类
类方法的应用场景:
1. 类中有些方法不需要传入对象,不要对象的一切场景
2 修改类中的静态变量时(无需传入对象参数)
3继承中,父类得到子类的类空间,可以对子类的内容进行修改
@staticmethod 静态方法装饰器
静态方法的作用:
1. 使代码块逻辑清晰
2. 复用性
类多继承c3算法
A(B,C,D)
#首先找到A继承的三个类的深度继承顺序,放到一个列表中
L[B] = [B,D,F,H] #B往上面的继承顺序
L[C] = [C,E,G,HJ] #C往上面的继承顺序
L[D] = [D,F,H] #D往上面的继承顺序
第二步:A自己的广度,第一层
L[A] = [B,C,D]
list = [A,B,C,D,F,E,G,H,O]
具体算法:
# 0 定义:每个列表的第一个元素为头部,其他部分为尾部
# 1 选定第一个列表
# 2 以列表头部(举例为B)为查找项,查找其他列表尾部是否含有B
# 3 如果没有,将B提取出来放到备用列表中,同时删除所有列表中的头部B,并对第一个列表进行步骤2操作
# 4 如果有,对下一个列表进行步骤2操作
# 只要提取出来一个,就从第一个列表的头部接着重复上面的操作
1 [B,D,F,H] [C,E,G,H] [D,F,H] [B,C,D]
2 [D,F,H] [C,E,G,H] [D,F,H] [C,D]
3 [D,F,H] [E,G,H] [D,F,H] [D]
4 [F,H] [E,G,H] [F,H] []
5 [H] [E,G,H] [H] []
6 [H] [G,H] [H] []
7 [H] [H] [H] []
8 [] [] [] []