假设您正在创建一个涉及大型类层次结构的项目,其中涉及相当复杂的__init__方法,这些方法从叶类到根始终调用父级,就像生活的分类法一样。
每个Organism
都可能有许多参数,它们之间以及层次结构中的任何专门参数都在其中共享。
假设在开发过程中您意识到可能需要向有机体的构造函数添加另一个参数,每个有机体都应该可以使用该参数来构造。构造类以将此参数添加到类层次结构的最佳方法是什么?我可以想到两种方式:
优点:
缺点:
示例:
class Organism:
def __init__(a=1, b=2, ...):
...
...
class HomoSapiens(Homo):
def __init__(a=None, b=None, ..., c=1, d=2):
...
super().__init__(a=a, b=b, ..., c=c)
class CanisFamiliaris(Canis):
def __init__(a=None, b=None, ..., e=1, f=2):
...
super().__init__(a=a, b=b, ..., e=e)
优点:
缺点:
示例:
class Organism:
def __init__(a=1, b=2, ...):
...
...
class HomoSapiens(Homo):
def __init__(c=1, d=2, **kwargs):
...
super().__init__(c=c, **kwargs)
class CanisFamiliaris(Canis):
def __init__(e=1, f=2, **kwargs):
...
super().__init__(e=e, **kwargs)
第二个选项很诱人,因为在签名更改的情况下,它涉及的编辑要少得多,但是它会牺牲太多的清晰度吗?