Как получить (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__
- это имя класса, который вы ищете.
>>> Foo.bar()
Foo
>>> Bar.bar()
Bar