如何一次更改班级的所有对象?

WoJ*_*WoJ 2 python oop

我正在通过我正在编写的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
Run Code Online (Sandbox Code Playgroud)

我所寻找的是改变的方式x,并y通过操纵父类的一次.我知道我可以有一个修改的方法self.a - 我不想使用它,因为这意味着我必须为每个对象单独调用它.

我的直觉是,这是不可能的,我必须巧妙地处理我的对象以简化这些活动(例如通过将它们存储在列表中我会循环,应用方法).我只是不想错过一个我不知道的机制,它会大大简化我的代码.

Tim*_*ker 5

如果将其定义为类变量,则可以让所有实例共享变量:

>>> 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
Run Code Online (Sandbox Code Playgroud)

请注意,现在如果更改myclass.a,您将看不到更改,x因为将在类变量之前查找实例变量 - 直到您使用del以下命令删除实例变量:

>>> myclass.a = 3
>>> x.a
4
>>> y.a
3
>>> del x.a
>>> x.a
3
Run Code Online (Sandbox Code Playgroud)