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