python基础知识:在一个模块中存储多个类(结合注释来理解常见操作)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/YJG7D314/article/details/102764385

前面讨论过,文件名.py = 模块。
本文讨论的主题是在一个模快(比如Car.py)中写多个类并存储。

虽然同一个模块中的类之间应存在某种相关性,但可根据需要在一个模块中存储任意数量的类。类Battery 和ElectricCar 都可帮助模拟汽车,因此下面将它们都加入模块Car.py.

"""一组用于表示燃油汽车和电动汽车的类"""
class Car:
    def __init__(self, make, model, year):  # 定义一个特别的初始化方法。无需实例的调用就可运行。减少重复代码的使用量
        # 初始化描述汽车的属性
        self.make = make  # 新建属性。self.属性名 = 属性值。语法借鉴赋值语句。
        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):
        """将里程表里的读数设置为指定的值"""
        self.odometer_reading = mileage  # 通过方法来修改属性值

    def increment_odometer(self, miles):
        """将里程表里的读数增加指定的量"""
        self.odometer_reading += miles  # 通过方法对属性的值进行递增

class Battery():
    """一次模拟电动汽车电瓶的简单尝试"""
    def __init__(self,battery_size = 60):
        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 = 270
        message = "This car can go approximately " + str(range)
        message  += "miles on a full charge."
        print(message)

class ElectricCar(Car):
    """模拟电动车的独特之处"""
    def __init__(self,make,mode,year):
        """
        初始化父类的属性,再初始化电动汽车特有的属性
        """
        super().__init__(make, model ,year)#将父类和子类关联起来,此时修改父类的初始化方法,以子类为优
        self.battery = Battery()

my_new_car = Car('audi', 'a4', 2016)  # 根据Car类创建的一个实例
print(my_new_car.get_descriptive_name())  # 通过实例来调用方法
# 替换一下:print(str(self.year) + " " + self.make + " " + self.model)会报错,在类外面调用初始化方法里的属性必须将self换成实例名
my_new_car.odometer_reading = 23  # 直接修改属性值
my_new_car.update_odometer(26)  # 通过方法来修改属性值
my_new_car.read_odometer()  # 通过实例来调用方法

#>>>
2016 Audi A4
This car has 26 miles on it.

现在,可以新建一个名为my_electric_car.py的文件,导入ElectricCar 类,并创建一辆电动汽车.

from Car import ElectricCar#import 语句让Python打开模块Car,并从Car模块中导入ElectricCar这个类
my_tesla = ElectricCar('tesla', 'model s', 2016)
print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

#>>>
2016 Audi A4
This car has 26 miles on it.

输出与我们前面看到的相同,说明大部分逻辑都隐藏在一个模块中。

猜你喜欢

转载自blog.csdn.net/YJG7D314/article/details/102764385