После оценки следующего кода:
class A():
def method1():
pass
def method2():
pass
class B(A):
def method3():
pass
def method4():
pass
class C(B):
def method1(): # notice the overriding of A.method1
pass
def method5():
pass
myC = C()
import inspect
# Find all methods
print [attr for attr in inspect.getmembers(myC) if callable(attr[1])]
[('method1', связанный метод C.method1 экземпляра ‹встроенного.C по адресу 0x079EA0D0>), ('method2', связанный метод C.method2 экземпляра ‹встроенного. Экземпляр C по адресу 0x079EA0D0>), ('method3', связанный метод C.method3 из ‹встроенного. Экземпляр C по адресу 0x079EA0D0>), ('method4', связанный метод C.method4 из ‹ экземпляр встроенного.C по адресу 0x079EA0D0), ('method5', экземпляр встроенного.C по адресу 0x079EA0D0>)]
Как получить происхождение методов?
- method1 и method5 исходят непосредственно из определения класса C
- method3 и method4 происходят из подкласса B класса C
- method2 происходит от подкласса A подкласса B класса C.
Для тех, кто любит знать конечную цель, я хочу отобразить справку для методов, непосредственно определенных в классе C, а не в подклассах.
C
? На самом деле это проще, чем вопрос, который вы написали; просто загляните вC.__dict__
. - person jonrsharpe   schedule 04.01.2017