我有两个几乎完全相同的小部件,不同之处在于其中一个小部件有一个额外的按钮。现在有两种完全一样的方法。我有什么策略来分享它们之间的代码?在此划分最佳选择吗?有一天我可能想改变超类的功能,而这些功能不会存在于子类中。在两个几乎相同的小部件之间共享代码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