已创建的类实例由setattr()python classmethod更新

2024-04-20 16:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在练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为什么会这样?我希望已经定义的对象将保留它们的属性,并且只有新的对象才能获得新属性。你知道吗


Tags: 对象实例代码selfnew属性defcls
1条回答
网友
1楼 · 发布于 2024-04-20 16:29:22

您的classmethod是类Me上的一个方法,因此它在的级别上运行,而不是类的单个实例。通常传递给classmethods的参数是cls而不是self,以提醒程序员注意这个事实。因此,在您的例子中,classmethod中的self是class,而不是实例,changed属性将应用于类的每个现有实例(以及将来可能创建的任何实例)。你知道吗

如果要对单个实例进行更改,只需使用标准方法。你知道吗

相关问题 更多 >