2015-06-03 177 views
3

如何獲取對象在其創建過程中使用的所有基礎列表?例如:獲取對象中的基礎列表

class MixinA(object): 
    pass 

class MixinB(object): 
    pass 

class mixedClass(MixinB, MixinA, object): 
    pass 

my_object = mixedClass() 
bases_used = my_object.??? # Is there a property that contains a list of [MixinA, MixinB, object]? 

我期待以某種方式提取什麼的對象的基礎是,主要是因爲我實際上建立對象的類動態,但我想什麼混入報告中的某些使用錯誤情況。

+0

所以*方法解析順序*的基礎? – Zizouz212

回答

2

你可以從__class__

bases_used = my_object.__class__.__bases__ 

print(bases_used) 
(<class '__main__.MixinB'>, <class '__main__.MixinA'>, <type 'object'>) 
+0

啊!優秀。那正是我期待的! –

+0

@NathanielFord,沒有問題,不客氣。 –

2

看到inspect.getmro,或inspect.getclasstree

>>> inspect.getmro(type(my_object)) 
(<class '__main__.mixedClass'>, <class '__main__.MixinB'>, <class '__main__.MixinA'>, <class 'object'>) 

另外,__bases__

>>> type(my_object).__bases__ 
(<class '__main__.MixinB'>, <class '__main__.MixinA'>, <class 'object'>) 
+0

我發現'inspect.getmro',但沒有用type()進行連接。謝謝! –