本问题已经有最佳答案,请猛点这里访问。
我在理解Python中的继承时遇到了一些困难,但是由于我在Java方面有一些更丰富的经验,所以我知道它是如何工作的……需要说明的是,我在这里搜索了这些问题以及在线文档,所以我知道这个问题马上就会被标记为重复的问题:P
我在Codecademy上的代码是这样传递的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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 |
但据我所知,我几乎定义了一个新类……遗产在哪里?我可以这样做:
1 2 3 4 5 6 | class ElectricCar(Car): def __init__(self, battery_type): self.model = model self.color = color self.mpg = mpg self.battery_type = battery_type |
也许是有关键词的东西
1 | super |
吗?
您可以调用Car init方法并传递它的参数
1 2 3 4 | class ElectricCar(Car): def __init__(self, model, color, mpg, battery_type): Car.__init__(self,model,color,mpg) self.battery_type = battery_type |
或者您也可以使用
1 2 3 4 | class ElectricCar(Car): def __init__(self, model, color, mpg, battery_type): super(ElectricCar,self).__init__(model, color, mpg) self.battery_type = battery_type |
如果您只是继承对象类,那么您说您实际上是在创建一个新类是正确的—它只是提供了一个基类。实际上,在python3中。X,这根本不需要。定义一个类,如下所示
1 2 | class Car: def __init(self, ... |
对象继承不用说。
你在正确的轨道上使用它。继承的真正威力在于通过定义(如:
1 2 3 | class ElectricCar(Car): super(ElectricCar, self).__init__() ... |
这为您提供了Car类的功能,而无需重新定义所有内容。
在这里查看关于继承的文档以获得更详细的信息。
Where is the inheritance in that?
继承在于你可以用这些类做什么:
1 2 3 4 5 6 | >>> 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. |
注意,您不必编写