小能豆

类变量的行为类似于实例变量(Python 3.4)

py

Python 3.4.0a1
Windows 8.1

已创建班级:

class Bank(object):  
    bankrupt = False  

在 IDLE 中输入命令,__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)为什么没有发生这种情况?


阅读 25

收藏
2024-12-03

共1个答案

小能豆

您已将新属性分配给实例。要更改类属性,请直接分配给该类。

在实例上查找属性时,查找会“直接”到类,然后到基类。这就是查找所有类属性(包括方法)的方式。

但是,在分配时,这直接发生在实例上。否则,您永远无法分配每个实例的值,而只能分配回类。如果一开始没有属性,则分配给a.bankrupt或将向实例添加属性。对于 Python,在方法中使用或从“外部”使用以分配给属性之间没有区别。b.bankrupt``self.bankrupt = True``a.bankrupt = True

只需直接分配给类属性(从方法或从“外部”):

Bank.bankrupt = True

请注意,相同的读取失败、写入赋值规则也适用于基类;如果在类中未直接找到属性,则在类中查找属性时会查找基类,但在类中设置属性时会直接设置,而不会影响基类上的属性。

2024-12-03