如果我定义:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
函数调用 Foo.bar() 是否可以确定类名 Foo?
如果我定义:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
函数调用 Foo.bar() 是否可以确定类名 Foo?
用类方法替换静态方法。这将在调用时传递给类,因此您可以从中获取类名。
class Bar(object):
@classmethod
def bar(cls):
# code
print cls.__name__
class Foo(Bar):
# code
pass
>>> Bar.bar()
Bar
>>> Foo.bar()
Foo
如果需要查找类信息,合适的方法是使用@classmethod
.
class Bar(object):
@classmethod
def bar(cls):
# code
print(cls.__name__)
class Foo(Bar):
# code
pass
现在你的bar
方法有一个类的引用,因为cls
它是调用者的实际类。如代码所示,cls.__name__
是您要查找的类的名称。
>>> Foo.bar()
Foo
>>> Bar.bar()
Bar
作为选项,如果您需要从静态方法(而不是类方法)确定类,我想以下代码可能会有所帮助:
class Bar(object):
@staticmethod
def bar():
pass
class Foo(Bar):
pass
foo_instance = Foo()
bar_static_function = foo_instance.bar
class_name = bar_static_function.__qualname__.split(".")[0]
print(class_name) # Foo