zl程序教程

您现在的位置是:首页 >  Python

当前栏目

Python面向对象编程(OOP) —— 导入类

2023-04-18 14:55:40 时间

前面我们讲过导入模块的方法(如何导入模块呢?),其实模块就是在同一个根目录下的 一个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,我们接下来要做的就是一次性导入 CarElectricCar

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 * #这样导入,及时文件开头没有列出用到的类,但你清楚知道在程序的哪些地方导入的模块,你还能避免导入的类与名称的冲突