代码之家  ›  专栏  ›  技术社区  ›  Shlomo

Python:动态访问属性的类型注释

  •  3
  • Shlomo  · 技术社区  · 7 年前

    鉴于以下类别:

    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 是从类还是从实例?

    以下操作不起作用:

    t1 = Test('a')
    import inspect
    inspect.signature(t1.test_prop)
    # TypeError: 'a' is not a callable object
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Patrick Haugh    7 年前

    你需要得到 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