我正在通过我正在编写的 GUI 应用程序重新发现 OOP,并且想了解是否可以更改从类实例化的所有对象的特性。我有以下代码:
class myclass():
def __init__(self):
self.a = 1
x = myclass()
y = myclass()
print x.a, y.a # outputs 1 1
# the instruction I am looking for, assigns 2 to a in each object at once
print x.a, y.a # outputs 2 2
我正在寻找一种通过操纵父类来立即更改x
和y
的方法。 我知道我可以有一个修改 self.a
的方法 - 我不想使用它,因为这意味着我必须为每个对象单独调用它。
我的直觉是这是不可能的,我必须巧妙地处理我的对象以简化此类事件(例如,通过将它们存储在一个我会循环的列表中,应用一个方法)。我只是不想错过一种我不知道但会大大简化我的代码的机制。
最佳答案
如果将变量定义为类变量,则可以让所有实例共享一个变量:
>>> class myclass():
... a = 1
... def __init__(self):
... self.b = 2
...
>>> x = myclass()
>>> y = myclass()
>>> x.a
1
>>> myclass.a = 2 # modify the class variable
>>> x.a
2
>>> y.a
2
>>> x.b = 3 # modify the instance variable
>>> x.b
3
>>> y.b
2
>>> x.a = 4 # create new local instance variable a
>>> x.a
4
>>> y.a
2
请注意,现在如果您更改 myclass.a
,您将不会在 x
中看到更改,因为实例变量将在类变量之前被查找 - 直到您使用 del
删除实例变量:
>>> myclass.a = 3
>>> x.a
4
>>> y.a
3
>>> del x.a
>>> x.a
3
关于python - 如何一次更改一个类的所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24819330/