导入类
1.1、导入单个类
如何导入单个类
- 以上一节为例,编写一个car.py程序
- 编写一个新程序my_car.py
- 希望在my.car.py文件中直接使用car.py中的函数,使用from car import Car
实例,新建一个car.py
1 class Car(): 2 """一次模拟汽车的简单尝试""" 3 def __init__(self,make,model,year): 4 self.make = make 5 self.model = model 6 self.year = year 7 self.odometer_reading = 0 8 9 def get_descriptive_name(self): 10 long_name = str(self.year) + " " + self.make + " " + self.model 11 return long_name.title() 12 13 def read_odometer(self): 14 print("This car has" + str(self.odometer_reading) + "mile on it.") 15 16 def update_odomter(self,mileage): 17 if mileage >= self.odometer_reading: 18 self.odometer_reading = mileage 19 20 else: 21 print("You can't roll back an odometer!") 22 23 def increment_odometer(self,miles): 24 self.odometer_reading += miles
新建一个my_car.py
1 from car import Car 2 my_new_car = Car('audi','a8',2018) 3 print(my_new_car.get_descriptive_name()) 4 5 my_new_car.odometer_reading = 23 6 my_new_car.read_odometer()
执行结果:
2018 Audi A8
This car has23mile on it.
1.2、在一个模块中存储多个类
如上级例子所示,将car类作为父类,Electricar(car)作为子类
1 class Car(): 2 """一次模拟汽车的简单尝试""" 3 def __init__(self,make,model,year): 4 self.make = make 5 self.model = model 6 self.year = year 7 self.odometer_reading = 0 8 9 def get_descriptive_name(self): 10 long_name = str(self.year) + " " + self.make + " " + self.model 11 return long_name.title() 12 13 def read_odometer(self): 14 print("This car has" + str(self.odometer_reading) + "mile on it.") 15 16 def update_odomter(self,mileage): 17 if mileage >= self.odometer_reading: 18 self.odometer_reading = mileage 19 20 else: 21 print("You can't roll back an odometer!") 22 23 def increment_odometer(self,miles): 24 self.odometer_reading += miles 25 26 27 # 将实例用作属性 28 class Battery(): 29 def __init__(self, battery_size=70): 30 """初始化电瓶的属性""" 31 self.battery_size = battery_size 32 33 def describe_battery(self): 34 """打印一条描述电瓶容量的信息""" 35 print("This car has a" + str(self.battery_size) + "-KWh battery.") 36 37 #打印一条消息,指出电瓶的续航里程 38 def get_range(self): 39 if self.battery_size == 70: 40 range = 240 41 42 elif self.battery_size == 85: 43 range = 70 44 45 msg = "This car can go approximately" + str(range) 46 msg += "miles on a full charge." 47 print(msg) 48 49 50 class ElectricCar(Car): 51 """电动汽车的独特""" 52 53 def __init__(self,make,model,year): 54 """初始化父类的属性""" 55 super().__init__(make,model,year) 56 57 # 给子类定义属性和方法 58 # self.battery_size = 70 #新属性 59 #初始化父类的属性,再初始化电动车特有的属性 60 self.battery = Battery() 61 62 # #给子类定义属性和方法 63 def describe_battery(self): 64 """打印一条描述电瓶容量的消息""" 65 print("This car has a " + str(self.battery_size) + "-KWh battery.") 66 67 #重写父类的方法 68 def fill_gas_tank(): 69 """电动汽车没有油箱""" 70 print("This car doesn't need a gas tank.")
在新的文件中,直接调用ElectricCar类即可。
1 from car import ElectricCar 2 3 my_tesla = ElectricCar("tesla",'model 2019',2019) 4 print(my_tesla.get_descriptive_name()) 5 my_tesla.battery.describe_battery() 6 my_tesla.battery.get_range()
执行结果:
1 2019 Tesla Model 2019 2 This car has a70-KWh battery. 3 This car can go approximately240miles on a full charge.
1.3、从一个模块中导入多个类
1 from car import Car,ElectricCar
1 from car import Car,ElectricCar #import语句让python打开模块car,并导入其中的Car类 2 3 my_new_car = Car('audi','a4',2016) 4 print(my_new_car.get_descriptive_name()) 5 my_new_car.read_odometer() 6 7 my_tesla = ElectricCar('tesla','roadstater',2016) 8 print(my_tesla.get_descriptive_name()) 9 10 """导入类是一种有效的编程方式。"""
1.4、导入整个模块
- 导入整个模块
- 使用句点表示法访问需要的类
1 import Car
实例
1 #导入整个模块 2 import car 3 my_beetle = car.Car('volkswagen','beetle',2019) 4 print(my_beetle.get_descriptive_name()) 5 6 my_tesla = car.Car('tesla','roadster',2018) 7 print(my_tesla.get_descriptive_name())
运行结果:
2019 Volkswagen Beetle
2018 Tesla Roadster
1.5、导入模块中的所有类
from modele_name import *
类编码风格
- 类名应采用驼峰命名法 ,即将类名中的每个单词的首字母都大写,而不使用下划线。实例名和模块名都采用小写格式,并在单词之间加上下划线。
- 对于每个类,都应紧跟在类定义后面包含一个文档字符串。这种文档字符串简要地描述类的功能,并遵循编写函数的文档字符串时采用的格式约定。
- 每个模块也都应包含一个文档字符串,对其中的类可用于做什么进行描述。
- 可使用空行来组织代码,但不要滥用。在类中,可使用一个空行来分隔方法;而在模块中,可使用两个空行来分隔类。
- 需要同时导入标准库中的模块和你编写的模块时,先编写导入标准库模块的import 语句,再添加一个空行,然后编写导入你自己编写的模块的import 语句。在包含多条import 语句的程序中,这种做法让人更容易明白程序使用的各个模块都来自何方