我有兩個幾乎完全相同的小部件,不同之處在於其中一個小部件有一個額外的按鈕。現在有兩種完全一樣的方法。我有什麼策略來分享它們之間的代碼?在此劃分最佳選擇嗎?有一天我可能想改變超類的功能,而這些功能不會存在於子類中。在兩個幾乎相同的小部件之間共享代碼PySide
0
A
回答
1
只需使用常規繼承。
class A(QtGui.QWidget):
def __init__(self):
super().__init__()
self.x = 1
self._initProperties() # Special method for changing values with inheritance
# end Constructor
def _initProperties(self):
"""Initialize special inheritance properties."""
self.setLayout(QtGui.QVBoxLayout())
# end _initProperties
def do_something(self):
return self.x
class B(A):
# def __init__(self):
# super().__init__()
#
# self.y = 2
# # Because we have _initProperties that will happen at the appropriate time we don't
# really need __init__. Just use _initProperties.
# However, I would still use __init__. I just commented it out as an example.
def _initProperties(self):
"""Initialize special inheritance properties.
Note: We did not call super, so we are not using the parents _initProperties methods.
We are overriding the parent method.
"""
self.y = 2
self.setLayout(QtGui.QHBoxLayout())
# end _initProperties
def do_something(self):
return super().do_something() + self.y
備用選項是創建一個常規的對象類mixin。
class MyMixin(object):
def __init__(self):
super().__init__()
self.x = 1
def do_something(self):
return self.x
class A(MyMixin, QtGui.QWidget):
pass
class B(MyMixin, QtGui.QGroupBox):
def __init__(self)
super().__init__()
self.y = 2
def do_something(self):
return super().do_something() + self.y
Python支持多重繼承。使用這種方法,類A可以是QWidget,而類B可以是類似QGroupBox的東西
0
你必須使用子類。這是OOP的一個非常基本的策略。 這個介紹給出了一個很好的概述:http://www.jesshamrick.com/2011/05/18/an-introduction-to-classes-and-inheritance-in-python/ 但是你也可以找到許多其他來源。
相關問題
- 1. 在兩個不同的git項目之間共享代碼
- 2. 如何在具有相同父項的兩個類之間共享代碼?
- 3. 兩個不同的GWT項目之間的共享代碼
- 4. 顯示兩個幾乎相同的代碼的不同輸出
- 5. 兩個幾乎相同的表之間的性能差異
- 6. 幾乎兩個相同的代碼,但只有一個輸出
- 7. 如何在幾個OCUnit測試用例之間共享代碼?
- 8. 在幾個Access 2013項目之間共享VB代碼
- 9. 在幾個項目之間共享c#類源代碼
- 10. 幾乎具有共同代碼的類
- 11. 兩個project.json文件可以共享相同的代碼庫嗎?
- 12. 兩個outlook VSTO插件之間的共享代碼
- 13. 在同一個Meteor網絡的幾個版本之間共享相同的代碼
- 14. SVN和幾個項目之間共享的代碼
- 15. 在git中共享兩個項目之間的代碼
- 16. 兩條几乎完全相同的代碼行結果不同?
- 17. 共享相同的模型JComboBoxes之間的兩個
- 18. 在不同.net版本之間共享的單個共享代碼庫
- 19. 宏重複幾乎相同的代碼
- 20. 多個站點之間的wordpress共享代碼代碼文件
- 21. 在不同文件夾中的分支之間共享代碼
- 22. git如何在兩個版本庫之間共享代碼
- 23. 如何在兩個項目之間共享代碼?
- 24. 如何在兩個GWT項目之間共享代碼?
- 25. 在兩個NodeJS微服務之間共享自定義代碼
- 26. 如何在兩個VSTS構建任務之間共享代碼?
- 27. 在兩個項目之間共享源代碼?
- 28. 在兩個Netbeans項目之間共享源代碼
- 29. Python:在兩個模塊之間共享模型代碼
- 30. 幾個viewmodels共享相同的視圖
繼承導致了一個奇怪的錯誤。所以這兩個類都有一個ui文件與他們協助。該子類適當地調用它的ui文件。但是,這個類中有一個方法(retranslateUi),它存在於兩個UI文件中。然而,子類會調用超級類別retranslateUi,這會在稍後混淆Ui。將unrelateUU重命名爲別的東西可以解決這個問題,但是我不想每次更換我的Ui都這樣做。任何想法如何解決這個問題? 編輯:沒關係,我改變了繼承的順序,現在它的工作 – 2014-10-17 12:19:42
我編輯了我的答案,以顯示其他事情,你可以做的繼承敏感變量和屬性,你可能不希望在子類。 – HashSplat 2014-10-17 13:45:27
是的,我基本上這樣做。調用setupUi方法中的設置。爲什麼你使用_雖然?這有什麼特別的理由嗎? – 2014-10-17 13:53:50