父 class 中未使用的参数,在子 class 中使用。糟糕的政策?
Unused argument in parent class, that is used in subclass. Bad policy?
我有一个父 class 在私有函数中有一个未使用的参数 _f(i)
class Parent:
def _f(i):
return range(m)
def g():
for i in range(n)
for j in _f(i)
# do something
旨在用于 subclasses
中的覆盖方法
class Child:
def _f(i):
return range(i, m)
有一个未使用的参数感觉很丑陋,但它使我免于方法 g()
中的代码重复。有没有建议的方法来避免它,或者我应该保持原样?
在一些面向 OOP 的语言中,如 Java 或 C#,有一些抽象方法可以将实现委托给子 class,但是在 python 中,使用它们的唯一方法是使用 abc
包,另一种方法是使用接口。
相关问题Abstract methods in Python
看起来objective是重用g
函数中的代码,这样第二个for
循环的范围可以通过class扩展来改变.更好的解决方案是完全摆脱 f
函数中的 i
参数,并改用 instance 变量。
Parent class
class Parent:
def _f():
return range(m)
def g():
for i in range(n)
for j in _f()
# do something
Child class
class Child:
def __init__(self, i):
self.i = i
def _f():
return range(self.i, m)
这种方法的一个直接优势是,如果选择添加更多将来需要在函数中使用的输入,则无需更改 f
函数的契约。
注意:此问题已被标记为与语言无关。上述代码中的任何语法错误都是故意的。
我有一个父 class 在私有函数中有一个未使用的参数 _f(i)
class Parent:
def _f(i):
return range(m)
def g():
for i in range(n)
for j in _f(i)
# do something
旨在用于 subclasses
中的覆盖方法class Child:
def _f(i):
return range(i, m)
有一个未使用的参数感觉很丑陋,但它使我免于方法 g()
中的代码重复。有没有建议的方法来避免它,或者我应该保持原样?
在一些面向 OOP 的语言中,如 Java 或 C#,有一些抽象方法可以将实现委托给子 class,但是在 python 中,使用它们的唯一方法是使用 abc
包,另一种方法是使用接口。
相关问题Abstract methods in Python
看起来objective是重用g
函数中的代码,这样第二个for
循环的范围可以通过class扩展来改变.更好的解决方案是完全摆脱 f
函数中的 i
参数,并改用 instance 变量。
Parent class
class Parent:
def _f():
return range(m)
def g():
for i in range(n)
for j in _f()
# do something
Child class
class Child:
def __init__(self, i):
self.i = i
def _f():
return range(self.i, m)
这种方法的一个直接优势是,如果选择添加更多将来需要在函数中使用的输入,则无需更改 f
函数的契约。
注意:此问题已被标记为与语言无关。上述代码中的任何语法错误都是故意的。