【问题标题】:Get function's 'namespace path'获取函数的“命名空间路径”
【发布时间】:2011-01-16 18:43:16
【问题描述】:

我有一些命名空间,一个包含在另一个中:

class A:
    class B:
        class C:
            def method(): pass

get_ns_path(A.B.C.method) # >>> 'A.B.C.method'

是否可以实现这样的get_ns_path(func) 接收方法/函数并以字符串形式返回“命名空间路径”?

A.B.C.method.im_class 给了C,很好,但是如何更进一步?

【问题讨论】:

    标签: python


    【解决方案1】:

    我认为这是不可能的:

    >>> dir(A.B.C)
    ['__doc__', '__module__', 'method']
    

    更令人信服的是,A.B.C 没有理由知道 A.B,因为您可以这样做 Z.C = A.B.C,它们将是同一个对象。那么get_ns_path(Z.C.method) 会返回什么?

    【讨论】:

      【解决方案2】:

      您可以使用inspect 模块获取mro

      inspect.getmro(cls)¶
      

      【讨论】:

      • MRO 用于继承,而不是包含在命名空间中:)
      • @o_O Tync '.'join(reversed(inspect.getmro(method.im_class))) ?
      • MRO 有所不同:inspect.getmro(A.B.C.f.im_class) >>> (<class __main__.C at 0x1d78d70>,)
      • @Robin 的回答是正确的。特性不知道它们是在哪个命名空间中声明的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      • 2011-04-29
      • 2014-08-24
      • 2010-12-22
      • 1970-01-01
      • 2012-09-02
      • 2019-06-08
      相关资源
      最近更新 更多