Получить имя родительского класса?
class A(object):
def get_class(self):
return self.__class__
class B(A):
def __init__(self):
A.__init__(self)
b = B()
print b.get_class()
Этот код напечатает <class '__main__.B'>
.
Как я могу получить имя класса, где был определен метод (а именно A
)?
Ответы
Ответ 1
Из документации: https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy
Объекты класса имеют атрибут __name__
. Это может быть проще для того, чтобы исследовать базовый класс с помощью __bases__
attr производного класса (если код должен жить в производном классе, например).
>>> class Base(object):
... pass
...
>>> class Derived(Base):
... def print_base(self):
... for base in self.__class__.__bases__:
... print base.__name__
...
>>> foo = Derived()
>>> foo.print_base()
Base
Ответ 2
inspect.getmro(cls)
Возвращает кортеж базовых классов класса clss, включая cls, в порядке разрешения метода. Нет класса больше, чем один раз в этом кортеже. Обратите внимание, что порядок разрешения метода зависит от тип clss. Если не используется очень специфический пользовательский метатип, cls будет первым элементом кортежа.
import inspect
inspect.getmro(B)
Результатом будет:
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
Первый элемент - это сам класс, второй элемент всегда является первым из родителей. После этого все может усложниться.
Ответ 3
Вы можете изменить
return self.__class__
return A().__class__
Поскольку нет другого экземпляра A(), доступного...