Python – как я могу получить имя класса из метода класса – используя @classmethod

У меня есть следующий код:

class ObjectOne(object):
    @classmethod
    def print_class_name(cls):
        print cls.__class__.__name__

    def print_class_name_again(self):
        print self.__class__.__name__

if __name__ == '__main__':
    obj_one = ObjectOne()
    obj_one.print_class_name()
    obj_one.print_class_name_again()

Результат:

type
ObjectOne

Я хотел бы, чтобы вывод был:

ObjectOne
ObjectOne

Но я хотел бы сохранить test_cls как метод класса через декоратор @classmethod.

Как я могу это сделать?


person jononomo    schedule 30.12.2012    source источник


Ответы (3)


Метод класса получает класс в качестве своего аргумента. Вот почему вы называете это cls. Просто сделайте cls.__name__.

person BrenBarn    schedule 30.12.2012

Это cls.__name__. cls уже указывает на класс, и теперь вы получаете имя его класса (которое всегда type).

person Matti Virkkunen    schedule 30.12.2012
comment
s/always/usually/. Метаклассы рулят. - person ; 31.12.2012

У меня был аналогичный вопрос, и я хотел получить имя класса для ведения журнала и имя функции/метода.

__name__ :  gives the program name
__class__.__name__ gives the class name

inspect.stack()[0][3] дает имя модуля. (вы должны импортировать инспекцию).

Ваше здоровье

person Wil    schedule 28.12.2018