Python 调用重写的超级方法两次以确保状态/结果有效?
我有两个类,一个是从父类继承的子类Python 调用重写的超级方法两次以确保状态/结果有效?,python,oop,Python,Oop,我有两个类,一个是从父类继承的子类 Parent类有一个名为getIt的方法,它使用属性param来计算一些值并返回它。该值可以是None。当Child类继承Parent时,它会覆盖getIt,这样如果getIt的返回值是None,它会将param更改为一定会返回除None以外的值。因此,我们的目标是永远不要让Child类的实例调用getIt返回None。我是这样做的 class Parent(object): def __init__(self, some_params):
Parent
类有一个名为getIt
的方法,它使用属性param
来计算一些值并返回它。该值可以是None
。当Child
类继承Parent
时,它会覆盖getIt
,这样如果getIt
的返回值是None
,它会将param
更改为一定会返回除None
以外的值。因此,我们的目标是永远不要让Child
类的实例调用getIt
返回None
。我是这样做的
class Parent(object):
def __init__(self, some_params):
self.param = some_value
def getIt(self):
val = # use self.param to do some logic
if val == []:
raise RuntimeError("message")
class Child(Parent):
def __init__(self, some_params):
super(Child, self).__init__(some_params)
def getIt(self):
try:
val = super(Child, self).getIt()
except RuntimeError:
self.param = some_other_value # setting self.param to some_other_value will surely make getIt return a non empty list`
val = super(Child, self).getIt()
return val
有什么更好的方法吗?@downvoter:这似乎是一个合法的问题。为什么投反对票?我是投反对票的人。你这样抽象地描述了这件事,我不知道你所做的是否明智。
self.param
代表什么,为什么在调用getter时将其值(以及对象的状态)更改为任意值是合理的?如果目标只是不让Child.getIt
返回None
,那么如果super>只返回默认值就更正常了(父母,自己).getIt
返回None
,而不是修改对象的状态并再次调用Parent.getIt
。但是如果没有更具体的解释,我不知道这是否是一个有用的注释。我同意@MarkAmery的观点-即使进行了编辑,似乎-嗯,很奇怪。如果你能描述限制应该放在父类中,子类应该只扩展功能。