Как получить (под) имя класса из статического метода в Python? - PullRequest
27 голосов
/ 30 августа 2010

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

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass

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

Ответы [ 2 ]

34 голосов
/ 30 августа 2010

Замените статический метод на метод класса.Класс будет передан при его вызове, поэтому вы можете получить имя класса из этого.

class Bar(object):

    @classmethod
    def bar(cls):
        # code
        print cls.__name__

class Foo(Bar):
    # code
    pass

>>> Bar.bar()
Bar

>>> Foo.bar()
Foo
2 голосов
/ 30 августа 2010

Если вам нужно найти информацию о классе, соответствующий способ - использовать @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
...