前面我们讲过导入模块的方法(如何导入模块呢?),其实模块就是在同一个根目录下的 一个Python 文件,类 也是如此,Python 允许你讲类存储在模块中,然后在主程序中导入所需要的模块
目录
下面是一个已经定义好的一个汽车的类,这个Python 文件命名为 car.py
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.orometer_reading = 0
def get_description(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name
def read_odometer(self):
print("This car has "+ str(self.orometer_reading) + " miles on it")
def update_orometer(self,miles):
if miles >= self.orometer_reading:
self.orometer_reading = miles
else:
print("You can'troll back an odometer")
def increase(self,miles):
self.orometer_reading +=miles
接下来我们再创建一个名为 my_car.py 的文件,然后导入Car 类,并创建实例
from car import Car #导入 car模块 中的 Car 类
my_new_car =Car("奥迪","a6", 2017)
print(my_new_car.get_description())
my_new_car.orometer_reading = 25
my_new_car.read_odometer()
现在回顾我们写的程序,如果我们把Car 类放入 my_car.py 这个 文件中,这样我的Python 代码得有多长呀!
接下来就看看我们写的my_car.py 中的程序,也就是第二段代码,上面的import 语句 打开模块car,并导入其中的 Car 类,这样我们就可以使用Car 类了,就像它在文件中定义的一样,输出和我们看到的是一样的。
我们通过把 类 移到模块中,然后导入它,你依然可以使用其中的功能,这样我们就提高了我们程序的可读性
我们直接在上面的模块中加入更多的类
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.orometer_reading = 0
def get_description(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name
def read_odometer(self):
print("This car has "+ str(self.orometer_reading) + " miles on it")
def update_orometer(self,miles):
if miles >= self.orometer_reading:
self.orometer_reading = miles
else:
print("You can'troll back an odometer")
def increase(self,miles):
self.orometer_reading +=miles
class Battery():
#一次模拟电动车充电的尝试
def __init__(self,battery_size = 70):
#初始化电频属性
self.battert_size = battery_size
def describe_battery(self):
print("This car has a "+ str(self.battert_size) + " -kwh battery")
def get_range(self):
#打印一条描述电瓶续航里程的消息
if self.battert_size == 80:
range = 260
elif self.battert_size == 85:
range = 270
message = "This kind of car can go approximately " + str(range)
message +=" miles on a full charge"
print(message)
class ElectricCar(Car):
#模拟电动汽车的特殊之处
def __init__(self,make,model,year):
super().__init__(make,model,year)#super是一个特殊的函数,帮助Python将父类和子类关联起来
self.battery = Battery() #这里定义了一个battery 新类
我们再创建一个新的python文件,并名为 my_eletric_car.py
from car import ElectricCar
my_car = ElectricCar("tesa","model's",2019)
print(my_car.get_description())
my_car.battery.describe_battery()
my_car.battery.get_range()
这样的程序是不是让人看得更加舒服一点呢?
我们再次创建一个Python 文件名为 :my_cars.py,我们接下来要做的就是一次性导入 Car 和 ElectricCar 类
from car import Car,ElectricCar #类的导入和函数的导入是一样的
my_beetle = Car("Volkswagen",'beetle',2019)
print(my_beetle.get_description())
my_tesla = ElectricCar('tesla','roadster',2019)
print(my_tesla.get_description())
我们直接在my_ cars.py 这个文件中进行修改,我们直接通过导入的模块,然后访问类中的方法
import car #一次性导入整个模块
my_beetle = car.Car("Volkswagen",'beetle',2019)
print(my_beetle.get_description())
my_tesla = car.ElectricCar('tesla','roadster',2019)
print(my_tesla.get_description())
这种方法并不推荐,因为我们在上面导入类的过程中,Python解释器(Pycharm) 会提示你有哪些类可以选择。这种方法导入会可能出现与文件名重复 导致难以察觉的问题。导入方法如下
from module_name import *
更好一点
from module_name.class_name import * #这样导入,及时文件开头没有列出用到的类,但你清楚知道在程序的哪些地方导入的模块,你还能避免导入的类与名称的冲突