编辑代码

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
class Car:
    """模拟汽车的尝试"""
    def __init__(self,make,model,year):
        """初始化描述汽车的属性"""
        self.make = make
        self.model = model
        self.year = year
        self.odometer_reading = 0


    def descriptive_name(self):
        """返回格式规范的描述性信息"""
        long_name = f"{self.year} {self.make} {self.model}"
        return long_name.title()

    
    def read_odometer(self):
        print(f"汽车里程为{self.odometer_reading}公里")

    
    # 修改属性的值方式二:通过方法设置
    def update_odometer(self,mileage):
        """将里程表读书设置为制定的值"""
        # self.odometer_reading = mileage
        # 修改属性的值方式三:通过方法递增设置特定值
        self.odometer_reading += mileage

class Battery:
    """模拟电动汽车电池的简单尝试"""

    def __init__(self,size=40):
        """初始化电池的属性"""
        self.size = size

    def describe_battery(self):
        """打印一条描述电池容量的消息"""
        print(f"这个车的电池容量为{self.size}-KWH")


class ElectricCar(Car):
    """一个关于电动车的类"""
    # 代码解释,复写父类的构造方法__init__(self,make,model,year):,但是复写后
    # 没有属性,需要调用父类的属性,不然继承链就断了
    def __init__(self,make,model,year):
        """初始化父类的属性,在初始化子类特有的属性"""
        super().__init__(make,model,year)
        # Car.__init__(self,make,model,year)
        self.battery = Battery()

    def descriptive_name(self):
        """返回格式规范的描述性信息"""
        long_name = f"{super().descriptive_name()} {self.battery.size}"
        return long_name.title()


# 创建类对象
car = Car('audi','a4l',2025)
print(car.descriptive_name())
# 修改属性的值方式一:直接通过实例修改
car.odometer_reading = 23
# 修改属性的值方式二:通过方法设置
car.update_odometer(52)
# 修改属性的值方式三:通过方法递增设置特定值
car.read_odometer()
print("-------------------------------------")
my_car = ElectricCar("byd","秦l",2025)
print(my_car.descriptive_name())
my_car.battery.describe_battery()