gpt4 book ai didi

python - 如何在对象的属性(也是对象)属性发生变化时自动调用对象的方法?

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

所以这里有一些代码可以更好地理解我正在尝试做的事情(最后的真实示例):

假设有一些低级类:

class Low:

def __init__(self):
self.value = 10

还有一个高级类,其属性之一是低级对象:

class High:

def __init__(self, LOW):

self._value = 5
self._LOW = LOW

# integer attribute

@property
def value(self):
return self._value

@value.setter
def value(self, new_value):
self._value = new_value
self.print_method()

def print_method(self):
print(self._value)

# object attribute

@property
def LOW(self):
return self._LOW

@LOW.setter
def LOW(self, NEW_LOW):
self._LOW = NEW_LOW
self.print_method_2()

def print_method_2(self):
print(self._LOW.value)

因此,如果我想通过更改作为整数的 High 类的 value 来自动调用 print_method(),我可以这样做:

LOW = Low()      # create Low level object
HIGH = High(LOW) # create High level object

HIGH.value = 100 # value is set to 100 -> and 100 will be printed (integer attribute change)

同样,如果我想通过更改也是对象的 High's 对象属性来调用 print_method_2(),我可以这样做:

LOW = Low()      # create Low level object
HIGH = High(LOW) # create High level object

LOW_2 = Low()
HIGH.LOW = LOW_2 # LOW is set to LOW_2 and 5 is printed (Object attribute change)

但我不想手动执行此操作。我想编辑低级对象并自动调用 print_method_2()

类似于:

LOW = Low()
HIGH = High(LOW)

LOW.value = 13 # automatically call print_method_2() in High -> print 13

理想情况下,这个低级别对象应该是几个不同高级对象的属性,并且每当它更改时,所有这些高级对象都应该更改。我知道自定义对象是可变的,因此低级别对象的这一更改应该自动更改所有这些高级对象。有什么想法如何做到这一点吗?

现实世界的例子:假设我有 Ground 类,其中包含有关 3D 地面的数据。该对象是草、树、河流...对象的属性。一切都取决于地面。因此,如果我编辑地面的高度,我不想再次将地面设置为草、树、河流......对象。我希望他们能够检测地面的变化并自动编辑。

最佳答案

实现此目的的最简单方法可能是为 HIGH 对象编写一个 setter 方法,该方法设置 HIGH.LOW.value 并调用您的方法。所以像这样:

class High:
def setLowValue(value):
self.LOW.value = value
self.print_method_2()

另一种方法是实现某种事件监听器,当值发生变化时触发事件。但这也超出了我在 Python 中的范围。

关于python - 如何在对象的属性(也是对象)属性发生变化时自动调用对象的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59748065/

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