鉴于以下类别:
class Test: def __init__(self, test_prop: str): self.__test_prop = test_prop @property def test_prop(self) -> str: return self.__test_prop
如何动态访问的类型批注 test_prop 是从类还是从实例?
test_prop
以下操作不起作用:
t1 = Test('a') import inspect inspect.signature(t1.test_prop) # TypeError: 'a' is not a callable object
你需要得到 property 对象本身,而不执行动态查找。这个 inspect 模块有一个功能, inspect.getattr_static 为此。然后我们可以使用 signature 获得 fget 该对象的属性。那就是 所有物 对象存储用于执行动态查找的函数。
property
inspect
inspect.getattr_static
signature
fget
所有物
from inspect import getattr_static, signature print(signature(getattr_static(t1, 'test_prop').fget)) # (self) -> str
属性的其他两个函数存储在属性中 fset 和 fdel
fset
fdel