我正在通过我正在编写的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 - 我不想使用它,因为这意味着我必须为每个对象单独调用它.
我的直觉是,这是不可能的,我必须巧妙地处理我的对象以简化这些活动(例如通过将它们存储在列表中我会循环,应用方法).我只是不想错过一个我不知道的机制,它会大大简化我的代码.
如果将其定义为类变量,则可以让所有实例共享变量:
>>> 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)
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |