2015-04-16 93 views
0

多重繼承我有這樣與抽象類

from abc import ABCMeta, abstractmethod 

class Observer(object): 
    __metaclass__ = ABCMeta 

    @abstractmethod 
    def update(self, dataMsg): 
     pass 

Observer.register(tuple) 

一類我需要能夠爲正片疊底繼承這樣

class MyTable(QTableWidget, Observer): 
    def __init__(self, data): 
     QTableWidget.__init__(self, 0, len(data)) 
     self.setHorizontalHeaderLabels(data) 

但如果我這樣做,我得到這個錯誤:

tableColumns = QStringList(['A' , 'B']) 
atable = MyTable(tableColumns) 

class MyTable(QTableWidget, Observer): 
TypeError: Error when calling the metaclass bases 
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases 

有沒有辦法解決這個問題?

回答

0

我不確定這是否會回來咬我,但我通過聚合而不是繼承來解決它。所以相反:

class MyTable(Observer): 
    def __init__(self, data): 
     self.myTable = QTableWidget(0, len(data)) 
     self.myTable.setHorizontalHeaderLabels(data) 

    def getWidget(self): 
     return self.myTable