我有以下内容:
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')?
请注意,这是一个简化。类和装饰器可能位于不同的模块中。
答案 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)
这将使多重继承变得混乱。希望它有所帮助。