2016-06-01 17 views
5

Làm thế nào tôi có thể nhận được tên của lớp bao gồm đường dẫn đầy đủ từ gốc mô đun của nó? Đối với Python 3.3 trở lên?Nhận tên đầy đủ của một lớp Python (Python 3.3+)

Dưới đây là ví dụ về mã 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() 

Mã này kết quả đầu ra tôi trên Python 3.3:

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

Vì vậy, Python nội đều biết rằng đối tượng của tôi là __main__.A.B.C, nhưng làm thế nào tôi có thể có được điều này lập trình? Tôi có thể phân tích cú pháp repr(self), nhưng có vẻ như là một hack cho tôi.

+1

có thể trùng lặp của http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a -hierarchy-of-given-class hãy nhìn vào đó để biết thông tin sử dụng thông qua thuộc tính '__bases__' và' inspect'module cung cấp thứ tự độ phân giải phương thức ('mro') cũng là thông tin thú vị bên cạnh chuỗi thừa kế chính thức" display ". Như quy tắc này mà phương pháp (trong trường hợp nhiều được cung cấp) sẽ được chọn loại giống như một hệ thống phân cấp hiệu quả. – Dilettant

+1

Kiểm tra thuộc tính ['__qualname__'] (https://docs.python.org/3/whatsnew/3.3.html#pep-3155-qualified-name-for-classes-and-functions). –

Trả lời

5

Bạn đang tìm kiếm __qualname__ (giới thiệu trong 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. Tôi đã tìm thuộc tính này và cố gắng tìm nó bằng cách sử dụng IPython, nhưng hoàn thành tab đã không hiển thị nó ở tất cả. Không chắc chắn lý do tại sao. – bialix

Các vấn đề liên quan