我有一个父类,在私有函数_f(i)
class Parent:
def _f(i):
return range(m)
def g():
for i in range(n)
for j in _f(i)
# do something
用于子类中的overriden方法
class Child:
def _f(i):
return range(i, m)
有一个未使用的参数感觉很难看,但它使我免于方法g()
中的代码重复。是否有任何建议的方法来避免它,或者我应该保留原样?
答案 0 :(得分:1)
看起来目标是重用{key: 1, a: 1, b: 2}
函数中的代码,以便可以通过类扩展更改第二个g
循环的范围。更好的解决方案是完全删除for
函数中的i
参数,而使用实例变量。
家长班
f
儿童课
class Parent:
def _f():
return range(m)
def g():
for i in range(n)
for j in _f()
# do something
这种方法的一个直接优势是,如果选择在将来添加需要在函数中使用的更多输入,则class Child:
def __init__(self, i):
self.i = i
def _f():
return range(self.i, m)
函数的合同不需要更改。
注意:此问题已被标记为语言无关。上述代码中的任何语法错误都是故意的。
答案 1 :(得分:0)
在一些面向OOP的语言中,如Java或C#,有一些抽象方法可以将实现委托给子类,但是在python中使用它们的唯一方法是使用abc
包,另一种方法是它将与接口。