gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:24:09 25 4
gpt4 key购买 nike

我有这个代码:

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),它允许您在特定属性更改时执行某些操作(在本例中为 我的东西).

关于python - 在一个实例中,我如何检测类成员何时被新实例成员替换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9606364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com