我有一个对象对象,想知道子对象何时发生了变化。我了解如何将__setattr__
用于基本类型,但不了解如何将其用于对象。我猜python使用点,也就是说,一旦内部对象中的元素发生更改,就不会对外部对象调用__setattr__
class OuterChangeDetection(object):
def __setattr__(self, key, value):
super().__setattr__(key, value)
print('OuterChangeDetection', key, value)
class InnerChangeDetection(object):
def __setattr__(self, key, value):
super().__setattr__(key, value)
print('InnerChangeDetection', key, value)
class Fruit(InnerChangeDetection):
def __init__(self, weight: int):
self.weight = weight
class Vegetable(InnerChangeDetection):
def __init__(self, weight: int):
self.weight = weight
class Basket(OuterChangeDetection):
apple: Fruit = Fruit(1)
banana: Fruit = Fruit(2)
potato: Vegetable = Vegetable(3)
def remove_bananas(self):
self.banana = None
if __name__ == '__main__':
basket = Basket()
basket.apple.weight *= 10
basket.banana.weight *= 10
basket.potato.weight *= 10
basket.remove_bananas()
输出:
InnerChangeDetection weight 1
InnerChangeDetection weight 2
InnerChangeDetection weight 3
InnerChangeDetection weight 10
InnerChangeDetection weight 20
InnerChangeDetection weight 30
OuterChangeDetection banana None
我还想在更改weight
时触发OuterChangeDetection
,以便知道篮子中的哪个元素已更改
目前没有回答
相关问题 更多 >
编程相关推荐