以下代码执行过程:
定义B类时,执行A()赋值操作,进行A类的初始化,再打印B类调用类属性x的a1属性
紧接着执行B类的初始化,通过b实例调用类属性的x的a1属性
class A:...如果一个类的类属性设置为描述器,那么它被称为此描述器的owner属主
描述器方法何时被触发:
当属主类中对是描述器的类属性进行访问时(即类似b.x),__get__方法被触发
当属主类中对是描述器的实例属性通过...只要是访问了是描述器的类属性,
都会被描述器的__get__方法拦截
属性的访问顺序(本质)
代码五
class A:
def __init__(self):
self.a1 =...__dict__)
屏蔽A类的__set__方法,实例的__dict__为{'x': 100}
不屏蔽A类的__set__方法,实例的__dict__为{}
__set__方法本质将实例的__dict...,触发描述器的__set__方法,在__set__方法中进行参数检查,再对其实例的类添加类属性
(如果添加在实例上,则会递归调用回到__set__方法)
使用装饰器获取参数注解