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

Получить имя родительского класса?

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)?

4b9b3361

Ответ 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(), доступного...