簡體   English   中英

如何擴展一個類實例?

[英]How to extend a class instance?

我有一個實例..

groupCell = QtGui.QGroupBox()
print groupCell.title() #this class has a method title()

我無法更改此實例的任何內容,它的狀態如何……

我需要擴展此實例(添加一些方法等)

class GroupBoxWithCheckbox (QtGui.QGroupBox):
    def __init__(self, basegroupbox, checkbox):
        #something like self = basegroupbox ?
        self.checkbox = checkbox
    def method(self):
        pass

最后

groupCellWithCheckBox = GroupBoxWithCheckbox(groupCell, checkbox)
print groupCellWithCheckBox.title()

我必須獲得與groupCell相同的標題。

您可以定義一個擴展QtGui.QGroupBox的新類,如下所示:

class GroupBoxWithCheckbox(QtGui.QGroupBox):

    def __init__(self, checkbox):
        super(GroupBoxWithCheckbox, self).__init__()
        self.checkbox = checkbox

    def method(self):
        pass

然后,你可以簡單地groupCell 這個類的一個實例,並傳遞一個復選框,當你初始化它:

groupCell = GroupBoxWithCheckbox(checkbox)

這將與您在此處嘗試執行的操作具有相同的效果。


編輯,因為已經提供了新信息:

由於我們在這里談論Python,因此您可以將內容動態添加到所需的任何實例中。 完全有可能這樣做:

groupCell.checkbox = checkbox

即使groupCell沒有checkbox屬性 如上我的代碼段所示,該屬性將在您設置時添加。 您可以用它來做您想要的。 這樣做很奇怪,我不建議這樣做,但是可以 另一種方法是制作某種包裝器類:

class GroupBoxWithCheckbox(object):
    def __init__(self, groupbox, checkbox):
        self.groupbox = groupbox
        self.checkbox = checkbox

groupCell = GroupBoxWithCheckbox(groupCell, checkbox)

然后,只要您想訪問原始GroupBox的方法,就可以執行以下操作

groupCell.groupbox.title()

groupCell.groupbox將包含原始GroupBox所做的所有方法,但您還可以訪問groupCell.checkbox

如果我對此進行編碼,則將實現后一種解決方案。

使用super調用基類構造函數:

class GroupBoxWithCheckbox(QtGui.QGroupBox):
    def __init__(self, basegroupbox, checkbox):
        super(GroupBoxWithCheckbox, self).__init__()
        self.checkbox = checkbox
        self.basegroupbox = basegroupbox
    def title(self):
        return self.basegroupbox.title()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM