Skip to main content
 首页 » 编程设计

python之在一个实例中,我如何检测类成员何时被新实例成员替换

2025年05月04日11Renyi-Fan

我有这个代码:

class ReplaceableClass(Object): 
    def __init__(self, x): 
        self.x = [x] 
 
    def movedata(self, old): 
        self.x = old.x + self.x 
 
class Example(Object): 
 
    myThing = ReplaceableClass(1)  
 
e = Example() 
 
e.myThing = ReplaceableClass(2) 

它怎么能像我用以下 block 替换最后一行一样工作?

myNewThing = ReplaceableClass(2) 
myNewThing.movedata(e.myThing) 
e.myThing = myNewThing 

所以 e.myThing.x 等于 [1,2] 而不是 [2]。

我尝试使用描述符,但它无法分配新对象,因为它会导致无限循环:

class ReplaceableClass(Object): 
 
    [...] 
 
    def __set__(self,a,b): 
        for p in dir(a): 
            if self==getattr(a,p): 
                self.movedata(b) 

请您参考如下方法:

有两种选择:

  • 在movedata 中使用self.__dict__ 来避免死循环。 self.__dict__ 是包含实例中所有属性的原始字典;如果直接访问字典,则不会调用描述符 API 使用的方法。

  • 如果您只有几个属性,则可以使用属性 API(请参阅 the property() function),它允许您在特定属性更改时执行某些操作(在本例中为 我的东西).