python - 如何一次更改一个类的所有对象?

标签 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

我正在寻找一种通过操纵父类来立即更改xy 的方法。 我知道我可以有一个修改 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/

相关文章:

python - 嵌套 if 条件和中断

oop - 为什么 Haskell 不需要工厂模式?以及在 Haskell 中,OOP 中的模式解决的需求是如何解决的?

php - 面向对象的方法桥

javascript - 为什么 Javascript 不能正确绑定(bind)我的点表达式?

python - 'HOG feature'列表中的每个值指示什么?

c# - .NET 的 Python : How to call a method of a static class using Reflection?

php - protected 构造函数是否被视为良好做法?

php - 我应该还是不应该使用 getter 和 setter 方法?

python - SQLAlchemy的多线程使用

python - mysql flask 中的光标无法正常工作