gpt4 book ai didi

python - 是否可以在修改列表成员时监视列表(或可变序列)?

转载 作者:太空狗 更新时间:2023-10-29 21:07:10 25 4
gpt4 key购买 nike

假设我有一个非常简单的数据类型:

class SimpleObject:
def __init__(self, property):
self.property = property

def update_property(self, value):
self.property = value

我用一种特殊的列表来存储数据类型:

class SimpleList(collections.MutableSequence):
def update_useful_property_of_list(self, value):
self.useful_property_of_list = value

我存储它们:

simple1 = SimpleObject(1)
simple2 = SimpleObject(2)

simple_list = SimpleList([simple1, simple2])

SimpleList 对象有什么方法可以知道其成员的某个属性何时更改?例如,当发生这种情况时,如何让 simple_list 执行 self.update_useful_property_of_list():

simple1.update_property(3)

最佳答案

如评论中所述,您正在寻找 Observer design pattern .在您的示例中最简单的方法:

class SimpleObject:
def __init__(self, property, propertyChangeObserver = None):
self.property = property
self.propertyChangeObserver = propertyChangeObserver

def registerPropertyChangeObserver(self, propertyChangeObserver):
self.propertyChangeObserver = propertyChangeObserver

def update_property(self, value):
self.property = value
if self.propertyChangeObserver:
self.propertyChangeObserver.simpleObjectPropertyChanged(self)

和:

class SimpleList(collections.MutableSequence):
def __init__(self, collection):
super(SimpleList, self).__init__(collection)
for e in collection:
e.registerPropertyChangeObserver(self)

def simpleObjectPropertyChanged(self, simpleObject):
pass # react to simpleObject.property being changed

因为您将您的属性称为“属性”,所以很难在这里证明低耦合 :) 为了清楚起见,我将方法称为 simpleObjectPropertyChanged,但实际上,SimpleList 不必知道它存储 SimpleObject 实例 - 它只需要知道它们是可观察的实例。以类似的方式,SimpleObject 不知道 SimpleList - 它只知道一些需要观察其状态的类(>observer - 因此该模式的名称)。

关于python - 是否可以在修改列表成员时监视列表(或可变序列)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27513326/

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