我有一個小應用程序,並且無法確定如何實現這一部分。原則上,這裏的問題是我需要爲類添加一個方法。但是,該類的實例是通過另一個類中的方法生成的。因此我不清楚如何在不創建第二類的子類的情況下實現子類。如何從另一個類的方法生成原始類的實例時處理子類?
更具體地說,這兩個類是: PlotItem和GraphicsLayoutWidget(來自pyqtgraph的類 - 下面縮寫pg)。
所以,在我的應用程序有:通過調用GraphicsLayoutWidget的addPlot()方法生成的PlotItem類
self.plotWidget = pg.GraphicsLayoutWidget
實例。即:
plt = self.plotWidget.addPlot(*args)
的問題是,我需要一個方法添加到PlotItem類,我已經對剛剛繼承它在做計劃。但是,我不知道如何在沒有GraphicsLayoutWidget子類的情況下生成這些實例。
這是最好的解決方案嗎?我已經讀了一些關於將猴子修補到PlotItem類中的方法,但是我通常不熟悉這種方法(對於所有這些方面來說都比較新穎)。
如果它是相關的,(簡化)子類定義:
class MyPlotItem(PlotItem):
def paint(self, painter, *args):
painter.setPen(...)
painter.drawRect(self.boundingRect())
PlotItem.paint(self, painter, *args)
我沒有看到繼承GraphicsLayoutWidget的不好之處。這樣可以更好地控制發生的事情,並使代碼更易於閱讀。 – 2014-12-01 21:16:42
如果您使用'PlotItem'類,那麼您的'paint'方法將被* all * plot-items使用,而不僅僅是通過'addPlot'添加的方法。爲了避免這種情況,你可以修改'PlotItem' *實例*。但是,實際上,最自然的方法是對'GraphicsLayoutWidget'和'PlotItem'進行子類化。 – ekhumoro 2014-12-01 23:13:29