版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前面讨论过,文件名.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.
输出与我们前面看到的相同,说明大部分逻辑都隐藏在一个模块中。