Подтвердить что ты не робот

Как получить (sub) имя класса из статического метода в Python?

Если я определяю:

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass

Можно ли вызвать функцию Foo.bar() для определения имени класса Foo?

4b9b3361

Ответ 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