【发布时间】:2021-03-20 20:38:38
【问题描述】:
我有一个嵌套类,我想在内部类的属性发生更改时更新外部类的属性。 这是一个小例子:
class Outer:
def __init__(self):
self.statements = {}
def add_statement(self, str_one, str_two):
inner = self.Inner(self, str_one, str_two)
self.statements[inner] = inner.sum
return inner
class Inner:
def __init__(self, outer_inst, str_one, str_two):
self.outer_inst = outer_inst
self.str_one = str_one
self.str_two = str_two
@property
def sum(self):
return self.str_one + self.str_two
代码基本上会在使用add_statement 创建内部类时更新statements。
>>> outer = Outer()
>>> inner = outer.add_statement("Hi", "Dog")
>>> inner.sum
"HiDog"
>>> outer.statements[inner]
"HiDog"
但是,假设我想改写inner.str_one = "Bye"。那么
>>> inner.str_one = "Bye"
>>> inner.sum
"ByeDog"
>>> outer.statements[inner]
"HiDog"
这里的问题是outer.statements 没有更新。对于我的实际代码,它确实需要嵌套类,我希望它能够更新(相信这种行为对于我想要的构造来说是可取的)。 因此,当内部属性发生变化时,如何找到更新外部类属性的方法?
【问题讨论】:
-
如果你调用
create_inner两次并且有两个Inner实例......那么Outer应该对应哪个......? -
两者一致?更新任何一个都会更新另一个。
-
i1 = outer.create_inner(...); i2 = outer.create_inner(...); i1.str_one = '1'; i2.str_one = '2'; outer.my_str— 现在呢? -
哦,我明白了,我误解了你的问题。这不是我在代码中实际执行的操作,因此看来我过于简化了 MWE。让我解决这个问题。
-
基本上,Outer 类中有一个字典,其键和值取决于内部类实例的创建。每当内部类的实例之一出现时,都需要更新字典。
标签: python class inner-classes