我正在通过我正在编写的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
的方法 - 我不想使用它,因为这意味着我必须为每个对象单独调用它。
我的直觉是,这是不可能的,我必须巧妙地处理我的对象以简化这些活动(例如,通过将它们存储在我将循环的列表中,应用方法)。我只是不想错过一个我不知道的机制,它会大大简化我的代码。
答案 0 :(得分:1)
不,你不能。在没有指向对象的指针的情况下,不能更改对象数据。可能你需要类变量和classmethod:
class myclass:
a = 1
@classmethod
def set_a(cls, val):
cls.a = val
x = myclass()
y = myclass()
print x.a, y.a # outputs 1 1
myclass.set_a(2)
print x.a, y.a # outputs 2 2
但在这种情况下,您无法单独更改对象的a
值。如果您想要这样的行为,可以在classdata中保存所有对象实例,如下所示:
class myclass:
objects = []
def __init__(self):
self.a = 1
# add instantiated object to object list
self.__class__.objects.append(self)
@classmethod
def set_all(cls, val):
# go through list and change each object
for obj in cls.objects:
obj.a = 2
x = myclass()
y = myclass()
print x.a, y.a # outputs 1 1
myclass.set_all(2)
print x.a, y.a # outputs 2 2
# and you cat change data of each object separately:
x.a = 3
print x.a, y.a # outputs 3 2
答案 1 :(得分:0)
class myclass():
a=10
def __init__(self):
self.b=0
a=myclass()
b=myclass()
print a.a,b.a #output 10,10
myclass.a=2
a=myclass()
b=myclass()
print a.a,b.a #output 2,2