2015-06-04 144 views
5

說我有類對象的Python中(A, B, C)列表解壓,我想從他們都繼承了當建築類D,如:從類繼承從列表

class A(object): 
    pass 

class B(object): 
    pass 

class C(object): 
    pass 


classes = [A, B, C] 

class D(*classes): 
    pass 

不幸的是,我得到我這樣做時出現語法錯誤。除了編寫class D(A, B, C)以外,我還能如何完成它? (有超過三個班在我的實際情況)

+2

(HTTP:// ideone.com/fXvAHL) – user2357112

回答

5

您可以動態創建使用type關鍵字,類別爲:

>>> classes = [A, B, C] 
>>> D = type('D', tuple(classes), {}) 
>>> type(D) 
<class 'type'> 
>>> D.__bases__ 
(<class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>) 

看到15247075更多的例子。

+1

純粹的迷人的一個字面上不可能的情況。 +1 :) – Zizouz212

3

一種方法是創建一個裝飾者,然後我們使用type()用於創建一個新的類:。在Python 3,你就可以只做]

def modify_bases(bases): 
    def decorator(cls): 
     return type(cls.__name__, tuple(classes), dict(cls.__dict__)) 
    return decorator 
... 
>>> %cpaste 
@modify_bases(classes) 
class D: 
    x = 1 
    y = 2 

>>> D.mro() 
[<class '__main__.D'>, <class '__main__.A'>, <class '__main__.B'>, <class '__main__.C'>, <type 'object'>] 
+0

純粹的迷人來裝飾一個字面上不可能的情況。 +1:D – Zizouz212