Python 3.4.0a1 Windows 8.1
已创建班级:
class Bank(object): bankrupt = False
在 IDLE 中输入命令,__main__结果如下:
__main__
>>> a = Bank() >>> b = Bank() >>> a.bankrupt False >>> b.bankrupt False >>> b.bankrupt = True >>> b.bankrupt True >>> a.bankrupt False
当我改变 b.bankrupt 时,我期望 a.bankrupt 更改为 True,因为变量 bankrupt 是为整个类定义的,而不是为单个实例定义的(带有self.bankrupt)为什么没有发生这种情况?
self.bankrupt
您已将新属性分配给实例。要更改类属性,请直接分配给该类。
在实例上查找属性时,查找会“直接”到类,然后到基类。这就是查找所有类属性(包括方法)的方式。
但是,在分配时,这直接发生在实例上。否则,您永远无法分配每个实例的值,而只能分配回类。如果一开始没有属性,则分配给a.bankrupt或将向实例添加属性。对于 Python,在方法中使用或从“外部”使用以分配给属性之间没有区别。b.bankrupt``self.bankrupt = True``a.bankrupt = True
a.bankrupt
b.bankrupt``self.bankrupt = True``a.bankrupt = True
只需直接分配给类属性(从方法或从“外部”):
Bank.bankrupt = True
请注意,相同的读取失败、写入赋值规则也适用于基类;如果在类中未直接找到属性,则在类中查找属性时会查找基类,但在类中设置属性时会直接设置,而不会影响基类上的属性。