L19 Class Attributes
- class attributes
- 类属性会被所有类实例共享,它们是类属性而不是实例的属性
-
Attribute Lookup
instance\class.name使用Name查属性时,先找自己的实例属性再找自己的类属性getattr(instance\class,'name')使用getattr查属性,先找自己的实例属性再找自己的类属性hasattr(instance\class,'name')使用hasattr查有无属性,先找自己的实例属性再找自己的类属性,有返回Truesetattr() delattr()只针对自己可write的属性
-
属性赋值 Assignment to Attributes --- 创建或修改属性
- 如果赋值调用者是 instance,那么赋值的是 instance的属性
- 如果赋值调用者是 class,那么赋值的是 class 的属性
最需要注意的应该是instance企图修改class属性时,是会创建一个同名的instance属性由该instance自己保留而非修改class属性。可参考examples里的代码- class对象
- 查访 --- class attributes
- 增改删 --- class attributes
- instance对象
- 查访 --- 自己的instance attributes + class attributes
- 增改删 --- 自己的instance attributes
- 所以用instance对class attribute企图做write操作时,本质上是创建了一个同名的instance属性
-
Method Calls
- 点调用
-
Bound Methods = Object + Function 一般是 instance + Function
self为第一个参数的方法account.deposit(5)等价于Account.deposit(account,5)