Как получить (sub) имя класса из статического метода в Python?
Если я определяю:
class Bar(object):
@staticmethod
def bar():
# code
pass
class Foo(Bar):
# code
pass
Можно ли вызвать функцию Foo.bar() для определения имени класса Foo?
Ответ 1
Заменить статический метод на класс. Это будет передано классу, когда он вызывается, поэтому вы можете получить имя этого класса.
class Bar(object):
@classmethod
def bar(cls):
# code
print cls.__name__
class Foo(Bar):
# code
pass
>>> Bar.bar()
Bar
>>> Foo.bar()
Foo
Ответ 2
Если вам нужно найти информацию о классе, подходящий способ - использовать @classmethod.
class Bar(object):
@classmethod
def bar(cls):
# code
print(cls.__name__)
class Foo(Bar):
# code
pass
Теперь ваш метод bar имеет ссылку на класс как cls, который является фактическим классом вызывающего. И как показано в коде, cls.__name__ - это имя класса, который вы ищете.