考虑到其中一个函数,如何在类外获取类名

时间:2016-11-11 10:07:37

标签: python

我有以下内容:

def print_class_name(func):
    def print_name(*args, **kw):
    print(func.__name__)            # 'whatever_func'
    print(func.__class__.__name__)  # it doesn't work :(

class Foo():
    @print_class_name
    def whatever_func(self):
        pass

我只能触摸装饰器函数print_class_name,而不能触及类Foo。如何使用print_class_name装饰器打印类的名称('Foo')?

请注意,这是一个简化。类和装饰器可能位于不同的模块中。

1 个答案:

答案 0 :(得分:2)

如果方法不是静态的(它需要一个类的实例),我认为你可以从method_name.__self__.__class__

获得定义该方法的类
class FooClass(object):

    def bar_method(self):
        pass

    def baz_static_method():
        pass

foo_instance = FooClass()
print(foo_instance.bar_method.__self__.__class__)
print(FooClass.baz_static_method.im_class)

这将使多重继承变得混乱。希望它有所帮助。