[英]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.