我知道通过实例访问 Foo 的属性会调用该__getattribute__()方法,但是如果我直接通过类访问这个属性呢?如果调用了一个函数,我想在其中设置一个断点,以便在我的项目中通过类访问此属性时可以触发断点。
我试图在魔法方法中设置断点__getattribute__(),但没有发生任何事情。
class Foo:
age = 18
print(Foo.age) # I am curious what method is called
Run Code Online (Sandbox Code Playgroud)
Python 中的一切都是一个对象,一切都有一个type决定对象行为的 。这也适用于类对象。您可以检查type(Foo):
>>> type(Foo)
<class 'type'>
Run Code Online (Sandbox Code Playgroud)
您可以通过提供自定义metaclass. 这个元类然后负责对类对象的属性访问:
class MyMeta(type):
def __getattribute__(self, name):
print(f'__getattribute__({self!r}, {name!r})')
return super().__getattribute__(name)
class Foo(metaclass=MyMeta):
age = 18
print(Foo.age)
Run Code Online (Sandbox Code Playgroud)
输出是:
__getattribute__(<class '__main__.Foo'>, 'age')
18
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
219 次 |
| 最近记录: |