Python基本继承[重复]

问题描述 投票:2回答:3

这个问题在这里已有答案:

我在Python中遇到了难以继承的问题,但我知道它是如何工作的,因为我在Java方面有了较大的经验......为了清楚起见,我在这里搜索了问题以及在线文档,所以我知道这将是在瞬间被称为重复的问题:P

我在Codecademy上的代码传递方式如下:

class Car(object):
    condition = "new"
    def __init__(self, model, color, mpg):
        self.model = model
        self.color = color
        self.mpg   = mpg

    def display_car(self):
        return "This is a %s %s with %s MPG." % (self.color, self.model, self.mpg)

    def drive_car(self):
        self.condition = "used"

class ElectricCar(Car):
    def __init__(self, model, color, mpg, battery_type):
        self.model = model
        self.color = color
        self.mpg   = mpg
        self.battery_type = battery_type

但据我所知,我几乎要定义一个新类......那里的继承是什么?我可以这样做:

class ElectricCar(Car):
    def __init__(self, battery_type):
        self.model = model
        self.color = color
        self.mpg   = mpg
        self.battery_type = battery_type

也许带有关键字的东西

super

?

python inheritance override
3个回答
5
投票

您可以调用Car init方法并传递其参数

class ElectricCar(Car):
    def __init__(self, model, color, mpg, battery_type):
        Car.__init__(self,model,color,mpg)
        self.battery_type = battery_type

或者您也可以使用super方法,这是评论中提到的首选方法。

class ElectricCar(Car):
    def __init__(self, model, color, mpg, battery_type):
        super(ElectricCar,self).__init__(model, color, mpg)
        self.battery_type = battery_type

1
投票

遗产在哪里?

继承在于你可以用这些类做什么:

>>> car = Car('Ford Prefect', 'white', 42)
>>> print(car.display_car())
This is a white Ford Prefect with 42 MPG.
>>> electric_car = ElectricCar('Tesla Model S', 'silver', None, 'lead-acid')
>>> print(electric_car.display_car())
This is a silver Tesla Model S with None MPG.

请注意,您不必编写ElectricCar.display_car()方法。


1
投票

如果你只是继承了对象类,那么你说你实际上是在创建一个新类是正确的 - 它只是提供了一个基础。事实上,在Python 3.X中,根本不需要这样做。定义一个类

class Car:
    def __init(self, ...

对象继承不言而喻。

你正在使用它的正确轨道。继承的真正力量在于建立其他预定义类,例如继承自Car的ElectricCar,通过以下定义:

class ElectricCar(Car):
    super(ElectricCar, self).__init__()
    ...

这为您提供了Car类的功能,而无需重新定义所有内容。

查看有关继承here的文档以获取更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.