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

Получить имя подкласса?

Можно ли получить имя подкласса? Например:

class Foo:
    def bar(self):
        print type(self)

class SubFoo(Foo):
    pass

SubFoo().bar()

напечатает: < type 'instance' >

Я ищу способ получить "SubFoo".

Я знаю, что вы можете сделать isinstance, но я не знаю имя класса априори, так что это не работает для меня.

4b9b3361

Ответ 1

#!/usr/bin/python
class Foo(object):
  def bar(self):
    print type(self)

class SubFoo(Foo):
  pass

SubFoo().bar()

Подкласс из object дает вам классы нового стиля (которые уже не так уж новые - python 2.2!) В любое время, когда вы хотите работать с атрибутом self, вы получите намного больше для своего доллара, если вы подклассы от объекта. Python docs... новые классы стиля. Исторически Python оставил старый стиль Foo() для обратной совместимости. Но это было давно. Существует не так много причин не подкласса от объекта.

Ответ 2

вы можете использовать

SubFoo().__class__.__name__

который может быть не по теме, так как он дает вам имя класса:)

Ответ 3

Он работает намного лучше, когда вы используете классы нового стиля.

class Foo(object):
  ....

Ответ 4

SubFoo.__name__

И родители: [cls.__name__ for cls in SubFoo.__bases__]