0
我想在Python中实现一个类,其中修改其属性的子集导致调用特定的类方法。我发现Python提供了很多方法来实现我想要的东西,但我不确定哪种方法是最实用的Pythonic和简约方法。在Python类中拦截属性修改
举例来说,假设我们有一个属性x
,y
,z
类Foo
,和我们感兴趣的拦截修改属性x
和y
。每当有人拨打foo.x = ...
或foo.y = ...
,我想要调用方法foo.bar
。另外,我并不在乎是否必须为每个属性使用包装器,前提是这个包装器只能被写入一次,例如以某种方式拦截几乎不存在的方法foo.set_x(...)
和foo.set_y(...)
至def foo.set_member(self, member, value): ...
。
所以,你想['__setattr__'](https://docs.python.org/3 /reference/datamodel.html#object.__setattr__)? – jonrsharpe
@jonrsharpe正是我所需要的,我错过了解释如何在''''__setattr__'''函数内实际访问成员的部分。然而,事实证明有一个'''set_XXX'''方法(是方法名的'''''XXX'''部分被动态解析)将更适合我的需求。不幸的是,它看起来像Python并没有通过某种机制拦截方法调用给我一个机会,它立即失败,并带有''AttributeError'''。 – Thanos