2016-06-01 6 views
5

Как я могу получить имя класса, включая полный путь, из его корня модуля? Для Python 3.3 и выше?Получить полное имя класса Python (Python 3.3+)

Вот пример кода Python:

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(repr(self)) 

x = A.B.C() 
x.me() 

Этот код выводит меня на Python 3.3:

__main__ 
C 
<__main__.A.B.C object at 0x0000000002A47278> 

Так, Python внутренне знает, что мой объект __main__.A.B.C, но как я могу получить это программно? Я могу разобрать repr(self), но это звучит как взлом для меня.

+1

Возможный дубликат http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a -иерархия заданного класса, пожалуйста, посмотрите там информацию об использовании через атрибут '__bases__' и предложения' inspect'module, порядок разрешения метода ('mro') также является интересной информацией, помимо формальной схемы отображения наследования. Поскольку это правило, какой метод (в случае множественного предложения) будет выбран как эффективная иерархия. – Dilettant

+1

Проверьте атрибут ['__qualname__'] (https://docs.python.org/3/whatsnew/3.3.html#pep-3155-qualified-name-for-classes-and-functions). –

ответ

5

Вы ищете __qualname__ (введен в Python 3.3):

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(type(self).__qualname__) 
       print(repr(self)) 
+0

D'oh. Я искал этот атрибут и пытался найти его с помощью IPython, но завершение вкладки не отображало его вообще. Не знаю, почему. – bialix