说我有以下内容:
class Parent(object):
[...]
def func(self, list):
for item in list:
if condition1:
do something
class Child(Parent):
[...]
def func(self, list):
for item in list:
if condition1 and condition2:
do something
将 condition2 添加到 func 而不必重新复制整个函数的优雅方法是什么?请注意,我实际上在嵌套的'ifs'中有两个附加条件。
答案 0 :(得分:6)
如果您有权访问Parent,则可以
class Parent(object):
[...]
def _condition(self, whatever):
return condition1
def func(self, list):
for item in list:
if self._condition(...):
do something
class Child(Parent):
[...]
def _condition(self, whatever):
return condition1 and condition2
答案 1 :(得分:4)
另一种方法是评估其他方法中的条件并覆盖子项:
class Parent(object):
[...]
def func(self, list):
for item in list:
if self.test(item):
do something
def test(self, item):
return condition1
class Child(Parent):
[...]
def test(self, item):
return super(Child, self).test(list) and condition2
答案 2 :(得分:1)
添加一个进行比较的新方法(函数)(在 Parent 上返回 condition1 ,在 Child <上返回 condition1和condition2 / em>的)。您只需要在子类中修改该函数。
抱歉买我不能写一个例子因为我不懂Python:P
答案 3 :(得分:1)
from functools import partial
class Parent(object):
[...]
def func(self, list, condition = lambda item: condition1):
for item in list:
if condition(item):
do something
class Child(Parent):
[...]
def func(self, list):
super(Child, self).func(list, condition = lambda item: condition1 and condition2)
如果你只想改变那个条件,或者
class Parent(object):
[...]
def func(self, list):
for item in list:
self.whatever(item)
@staticmethod
def whatever(item):
if condition1:
do something
class Child(Parent):
[...]
@staticmethod
def whatever(item):
if condition1 and condition2:
do something
如果你想在循环中改变多个东西。 do something
staticmethod
也可以是Parent
上的另一个{{1}},如果两者都相同的话。{/ p>