在Python中,如何确定声明方法的类?

时间:2011-02-07 15:17:27

标签: python introspection decorator

如何获取声明方法的类的引用?在下面的代码中,我尝试在Classical中引用test

class Classical:
    def method():
        pass

def test(func):
    # How can I get a reference to 'Classical' using only 'func'?
    pass

test(Classical.method)

我试过dir()和搜索,但无济于事。有任何想法吗? (如果重要,我正在运行Python 3.1)

编辑:更改代码以使其更有意义。

1 个答案:

答案 0 :(得分:2)

在创建此类时,函数装饰器test()在类Classical的上下文中执行。在类体中执行代码时,该类尚不存在,因此无法访问它。您应该使用class decorator而不是函数装饰器来解决此问题。

或者,您可以告诉我们您实际想要实现的目标。最有可能的是,会有一个简单的解决方案。

编辑:要回答您编辑过的问题:要访问未绑定方法所属的类,您可以在CPython 2.x中使用unbound_method.im_class。我不知道这是否可以移植到其他Python实现中,并且很可能有更好的方法来实现您想要实现的任何目标。