class Car():
"""一次模拟汽车的简单尝试"""
def __init__(self, make, model, year):
"""初始化描述汽车的属性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整洁的描述性名称"""
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
"""打印一条消息,指出汽车的里程"""
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
""" 将里程表读数设置为指定的值
拒绝将里程表往回拨
"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
"""将里程表读数增加指定的量"""
self.odometer_reading += miles
class Battery():
"""一次模拟电动汽车电瓶的简单尝试"""
def __init__(self, battery_size=70):
"""初始化电瓶的属性"""
self.battery_size = battery_size
def describe_battery(self):
"""打印一条描述电瓶容量的消息"""
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def get_range(self):
"""打印一条描述电瓶续航里程的消息"""
if self.battery_size == 70:
range = 240
elif self.battery_size == 85:
range = 270
message = "This car can go approximately " + str(range)
message += " miles on a full charge."
print(message)
class ElectricCar(Car):
"""模拟电动汽车的独特之处"""
def __init__(self, make, model, year):
""" 初始化父类的属性,再初始化电动汽车特有的属性
"""
super().__init__(make, model, year)
self.battery = Battery()
这两行代码中self.battert = Battery()是不是也是继承 可以给一点系统的解释吗 不太明白 如果是继承的话把上面哪个super去掉他也可以继承吗 继承不是前面需要加上super.()吗
super().init(make, model, year)
self.battery = Battery()
self.battery = Battery()
这是实例化呀
实例化一个Battery类型的对象,存放到self.battery这个字段里
你的电动车是继承自汽车的,但是电池和汽车之间没有继承关系
电动车里面实例化了一个电池对象而已
继承首先要在定义子类的时候,括号里写上父类的名字,比如:
class ElectricCar(Car):
ElectricCar就是Car的子类,可以继承父类Car的方法和属性。
super().__init__(make, model, year)
这里的super()就是继承父类Car的初始化方法,使自己也拥有父类Car的那些属性,相当于:
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
super()里隐式传参self,所以后面的参数只要写父类Car需要的参数即可。
self.battery = Battery() 是创建一个Battery类,和继承没关系