对于简单的策略设计模式,我有一个更具设计性的问题。
假设我有一个界面:
class RenewInterface:
def __init__(*args, **kwargs):
self.var1 = {}
self.var2 = []
if args:
for i in args:
inst = i()
self.var1[inst.__class__.__name__] = inst
@abstractmethod
def renew(*args, **kwargs)
Do some stuff and call renew in self.var1[inst__class__.__name__]
class ChildClass(RenewInterface):
def __init__(*args, **kwargs):
super(ChildClass, self).__init__(*args, **kwargs)
def renew(self, *args, **kwargs)
Do more stuff
当我继承该类时,如果我选择调用超类__init__
(上面的代码)。如果我没有args那么我只会将var1
和var2
暴露给子类,但如果我出于某种原因有args并且我用super(ChildClass, self).__init__(*args, **kwargs)
调用了父(RenewInterface)并且arg由于某种原因是ChildClass的类,那么我想我会从它自己实例化ChildClass?由于我不关心超类中的变量可以:
__init__
所有?,然后再次使用RenewInterface __init__
进行实例化我已经尝试了所有这一切都有效,但我不确定最“pythonic”的做法是什么?或者更重要的是,这与版本2.6,2.7和python> = 3.3不同。
我已阅读文档并试图谷歌,但我没有找到任何确凿的信息:(
此致
答案 0 :(得分:0)
如果我错了,请纠正我。
您似乎想知道处理方法重载的最pythonic方法,特别是 init 方法来解决您的问题。
选项包括: 1.超载方法,但不要打电话给超级班级'方法 2.不要使方法过载。离开超级班#39;要调用的方法。
这不是一个' pythonic'问题,它与OO有关。 基类方法提供默认实现。如果您不想要默认实现,则覆盖该方法。根据我的意见,您对子类的默认实现不满意。覆盖它。