前言
今天是学习Python的学习的第十六天。上一次的两个代码不晓得大家弄明白了没有,后面会越来越难的,所以大家尽量弄明白一点吧。一定要仔细看注释、注释。
类
导入类
随着不断给类添加功能,文件可能会变得越来越长,Python允许将类存储在模块中,然后再主程序中导入模块
导入单个模块
这里的Car类模板是上一天的那个类的板块
class Car:
---snip---
#创建子类时,父类文件必须包含在该文件中,且圆括号内必须包含父类的名称
#---snip--- 表示上一个代码中父类的基本属性
class Battery:#先是定义了一个新类——Battery,他没有继承任何类。
"""一次模拟电动汽车电瓶的简单尝试。"""
def __init__(self,battery_size = 75):#其中有一个形参battery_size,这个形参是可选的,被默认为75.但不是默认值,仍然可以进行改变的
"""初始化电瓶的属性"""
self.battery_size = battery_size
def describe_battery_size(self):
"""打印一条描述电瓶容量的消息"""
print(f"This car has a {self.battery_size}-kwh battery")
def get_range(self):
"""打印一条消息,指出电瓶的续航里程"""
if self.battery_size == 75:
range = 260
elif self.battery_size == 100:
range = 315
print(f"This car can go about {range} miles on a full charge")
#虽然将原来的实例电池作为属性,有点繁杂,但是整个之后可以方便我们对电池进行更详细的描述,不至于在子类中显得太繁杂
class Electric_Car(Car):
"""描述电动汽车类"""
def __init__(self,make,model,year):
"""
初始化父亲的属性
再初始化电动汽车特有的属性
"""
super().__init__(make,model,year)#super()能够让我们调用父类的方法
self.battery_size = Battery()#直接在子类的基本属性中添加基本属性了
def describe_battery(self):#添加新的方法
"""打印一条描述电瓶容量的消息"""
print(f"This car has a {self.battery_size.battery_size}-kwh battery.")#当battery没有变成类的时候,battery相当于一个一个简单
#的属性并且已经是个默认值了。但是将battery变成类时,battery_size = Battery 然后需要去该类中寻找描述电池的方法,所以格式为,实例名.属性.类方法
def fill_gas_tank(self):
"""电瓶车没有汽油"""
print(f"This car doesn't need a gas tank")
上面是文件源码
from Car类模板 import Car
my_new_car = Car('audi','a4','2019')
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23#直接访问Car类的属性并进行修改
my_new_car.show_odometer()
结果:
2019 Audi A4
This car has 23 miles on it
使用导入后文件明显变的简洁
在一个模块中存储多个类
如果几个类相关联,则可以存储在同一个模块,也可以没关联,反正一个,模块中可以存储多个类
from print_founction import Electric_Car#print_founction 中含有多个类,这里调用了Electri_Car,通过该类成功的调用了类 Battery
my_new_car = Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())
my_new_car.battery_size.describe_battery_size()
my_new_car.battery_size.get_range()
结果:
2019 Audi A4
This car has a 75-kwh battery
This car can go about 260 miles on a full charge
2009 Tesla Suv
从一个模块中导入多个类
关键语句:from 模块名 import 类、类
from print_founction import Electric_Car
my_new_car = Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())
my_new_car.battery_size.describe_battery_size()
my_new_car.battery_size.get_range()
my_old_car = Car('tesla','Suv',2009)
print(my_old_car.get_descriptive_name())
结果:
2019 Audi A4
This car has a 75-kwh battery
This car can go about 260 miles on a full charge
2009 Tesla Suv
总结:这里用来两个实例分别对应Car和Electric_Car调用了两个类
导入整个板块
关键语句:import 模块名。但是后面调用类时,得让其检索到类时来自那个模块的所以调用时 实例名 = 模块名.类(基本属性)
import print_founction
my_new_car = print_founction.Electric_Car('audi','a4',2019)
print(my_new_car.get_descriptive_name())
my_new_car.battery_size.describe_battery_size()
my_new_car.battery_size.get_range()
my_old_car = print_founction.Car('tesla','Suv',2009)
print(my_old_car.get_descriptive_name())
结果同上
导入模块中所有类
关键语句:from 模块 import*
from print_founction import*my_new_car = Electric_Car('audi','a4',2019)print(my_new_car.get_descriptive_name())my_new_car.battery_size.describe_battery_size()my_new_car.battery_size.get_range()my_old_car = Car('tesla','Suv',2009)print(my_old_car.get_descriptive_name())
结果同上,这里时导入所有类,所以不需要索引类的位置,格式与导入整个板块不同
在一个模块中导入另一个模块
有时候,需要将多个类分散到多个模块中,以免模块太大,或者在同一个模块中有不相关联的类。
前提:我将Car类与Electric_Car分离,将Car类模块的导入Electric_Car模块中
from Car类模板 import Car
from Car类模板 import Electric_Car
#使用from import分别调用类
my_old_car = Car('adiu','Suv',2019)
my_old_car.get_descriptive_name()
my_new_car = Electric_Car('baoma','yueyedi',2013)
my_new_car.get_descriptive_name()
print(my_old_car.get_descriptive_name())
print(my_new_car.get_descriptive_name())
结果:
2019 Adiu Suv
2013 Baoma Yueyedi
今天的内容也不是很多,希望大家能够好好消化,加油。
转载:https://blog.csdn.net/m0_52699073/article/details/116809157