我一直在练Python。我创建了一个类,然后创建了该类的实例。你知道吗
当我向类中添加一个classmethod,通过setattr()使用新属性更新类本身时,已经实例化的对象将获得新值。如果“旧”实例已经实例化,那么它们如何获得新属性,我感到非常惊讶。你知道吗
让我看看我的代码。。。你知道吗
class Me:
x=10
def __init__(self,y):
self.y=y
def mem(self):
return self.y
def __call__(self):
print ("I was Called")
@classmethod
def addnewprop(cls):
newproperty=4
setattr(cls,"new",newproperty)
操作如下:
>>>x=Me(9)
>>>y=Me(8)
>>>hasattr(x,"new")
>>>False
>>>Me.addnewprop()
>>>hasattr(x,"new")
True
>>>
呼叫Me.addnewprop文件()还使上述对象接收新属性,即(hasattr(x,“new”)返回true尽管已经实例化,但python为什么会这样?我希望已经定义的对象将保留它们的属性,并且只有新的对象才能获得新属性。你知道吗
您的
classmethod
是类Me上的一个方法,因此它在类的级别上运行,而不是类的单个实例。通常传递给classmethods的参数是cls而不是self,以提醒程序员注意这个事实。因此,在您的例子中,classmethod中的self是class,而不是实例,changed属性将应用于类的每个现有实例(以及将来可能创建的任何实例)。你知道吗如果要对单个实例进行更改,只需使用标准方法。你知道吗
相关问题 更多 >
编程相关推荐