How to get (sub)class name from a static method in Python?

If I define:

class Bar(object):

    @staticmethod
    def bar():
        # code
        pass

class Foo(Bar):
    # code
    pass

Is it possible for a function call Foo.bar() to determine the class name Foo?

28
задан Jean-Pierre Chauvel 29 August 2010 в 21:18
поделиться

2 ответа

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

class Bar(object):

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

class Foo(Bar):
    # code
    pass

>>> Bar.bar()
Bar

>>> Foo.bar()
Foo
34
ответ дан 28 November 2019 в 03:38
поделиться

Если вам нужно найти информацию о классе, лучше всего использовать @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
2
ответ дан 28 November 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: