关于继承:在python中将参数传递给超类__init__

Passing arguments to super class __init__ in python

考虑以下类别:

1
2
3
class Car():
    def __init__(self, model):
        self.model = model

如果我想定义特定的模型,我可以这样做:

1
2
3
4
class FordGT(Car):
    model ="Ford GT"
    def __init__(self):
        Car.__init__(self,self.model)

这样,我可以创建大量不同的车型。但是,这样做的唯一问题是,对于每个车型,我都要重复init函数。

1
2
def __init__(self):
    Car.__init__(self,self.model)

代码重复对我来说总是坏代码的标志。我怎么修这个?是否可以在不对子级使用init的情况下将init参数传递给父级?


首先,你需要抛开这个宽泛的假设。重复的代码并不一定是坏代码,如果通过重复一些东西,可以使代码更清晰。

第二,尽管如此,我不明白为什么您需要__init__,或者对超类方法的调用。当从最初在子类上定义的方法访问时,self.model与从最初在超类上定义的方法访问时相同;这是整个继承点。所以您可以在整个过程中使用该属性。