gpt4 book ai didi

python - 拦截类内类中属性的变化——Python

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

我一直在摆弄 pygame 和 python,我希望能够在我的类的属性发生变化时调用一个函数。我目前的解决方案是:

class ExampleClass(parentClass):
def __init__(self):
self.rect = pygame.rect.Rect(0,0,100,100)
def __setattr__(self, name, value):
parentClass.__setattr__(self,name,value)
dofancystuff()
Firstclass = ExampleClass()

当我使用 Firsclass.rect = pygame.rect.Rect(0,0,100,100) 更改 rect 值时,这工作正常并且调用了 dofancystuff。但是,如果我说 Firstclass.rect.bottom = 3__setattr__ 并且没有调用 dofancystuff。

所以我想我的问题是如何拦截对子类属性的任何更改?

编辑:另外,如果我以错误的方式解决这个问题,请告诉我我对 python 不是很了解。

最佳答案

嗯,简单的答案是你不能。在Firstclass.rect = <...>的情况下你的__setattr__叫做。但在 Firstclass.rect.bottom = 3 的情况下__setattr__ Rect 实例的方法被调用。我看到的唯一解决方案是创建一个 pygame.rect.Rect 的派生类,您可以在其中覆盖 __setattr__方法。您也可以猴子修补 Rect 类,但出于充分的理由不鼓励这样做。

关于python - 拦截类内类中属性的变化——Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/676826/

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