32. Python中模块和类的组织

本文详细介绍了Python中模块的概念,如何将类保存在模块中并导入,以及多种导入类的方法。重点讲解了模块的命名规范和类的组织结构,包括基类和子类的使用。通过实例演示了import、from...import和*导入的区别,以及函数模块的运用。
摘要由CSDN通过智能技术生成

《Python编程的术与道:Python语言入门》视频课程
《Python编程的术与道:Python语言入门》视频课程链接:https://edu.csdn.net/course/detail/27845

模块和类 (Modules and classes)

Python允许将类保存在另一个文件中,然后将它们导入到你正在处理的程序中。 这样做的另一个好处是可以将类隔离到文件中,从而可以在任意数量的不同程序中使用。

将一个类保存在模块中

将类保存到单独的文件中时,该文件称为模块(module)。 一个模块中可以有任意数量的类。

首先将Vehicle类保存到名为vehicle.py的文件中。 请注意这里使用的命名约定:模块以小写名称保存,类以大写字母开头。

# Save as vehicle.py

# base class
class Vehicle():
    def __init__(self, color):
        self.color = color
 
    def description(self):
        print("I'm a", self.color, "Vehicle")        

创建一个名为vehicle_game.py的单独文件。 同样,要使用标准命名约定,确保为此文件使用lowercase_underscore名称。

# Save as vehicle_game.py
from vehicle import Vehicle

vehicle = Vehicle('White')
vehicle.description()
I'm a White Vehicle

这非常干净整洁。你不必在处理vehicle.py文件中的类代码; 定义车辆属性和行为的代码存在于一个文件中,可以在任何地方使用。

第一行告诉Python查找名为vehicle.py的文件。 它在与当前程序相同的目录中查找该文件。 你可以将你的类放在其他目录中,但稍后介绍如何做。

当Python找到文件vehicle.py时,它会查找一个名为Vehicle的类。 当它找到该类时,它会将该代码导入当前文件。 然后,你可以自由地使用Vehicle类。

将多个类保存在一个模块中

一个模块只是一个包含一个或多个类或函数的文件,因此car类实际上也属于vehicle模块:

# Save as vehicle.py

# base class
class Vehicle():
    def __init__(self, color):
        self.color = color
 
    def description(self):
        print("I'm a", self.color, "Vehicle")    
        
# subclass
class Car(Vehicle):
    def __init__(self, color, style):
        super().__init__(color)     # invoke Vehicle’s __init__() method
        self.style = style
    
    def description(self):
        print("I'm a", self.color, self.style)

现在可以导入vehicle和car类,并使用它们:

# Save as car_game.py
from vehicle import Vehicle, Car

# create an object from each class
v = Vehicle('Red')
c = Car('Black', 'SUV')

v.description()      
c.description()     
I'm a Red Vehicle
I'm a Black SUV

第一行告诉Python从vehicle模块导入Vehicle和Car类。当然, 你不必导入模块中的每个类; 可以选择使用的类,这样Python只花时间处理这些特定的类。

导入模块和类的若干方法

有几种方法可以导入模块和类,每种方法都有自己的优点。

import module_name

from module_name import ClassName

这种方法很简单,很常用。 它允许直接在程序中使用类名,因此是非常干净且可读的代码。 但是,如果要导入的类的名称与你正在使用的程序中已使用的名称冲突,则可能会出现问题。

在这种情况下,你可以导入模块本身:

# Save as car_game.py

import vehicle 
# create an object from each class
v = Vehicle('Red')
c = Car('Black', 'SUV')

v.description()      
c.description()    
I'm a Red Vehicle
I'm a Black SUV

这种导入的一般语法是:

import module_name

在此之后,使用点表示法访问类:

module_name.ClassName

import module_name as local_module_name

import module_name as local_module_name

将模块导入其中一个项目时,可以自由选择项目中模块所需的任何名称。

# Save as car_game.py
import vehicle as vehicle_module
# create an object from each class
v = Vehicle('Red')
c = Car('Black', 'SUV')

v.description()      
c.description()    
I'm a Red Vehicle
I'm a Black SUV

此方法通常用于缩短模块的名称,因此不必在要使用的每个类名之前键入长模块名称。

import vehicle as vehicle_module

代码比以下更易读:

import vehicle as veh

from module_name import *

还有一个应该注意的导入语法,但应该避免使用。 此语法导入模块中的所有可用类和函数:

from module_name import *

不建议这样做。 首先,你可能不知道模块中所有类和函数的名称是什么。 如果不小心将其中一个变量与模块中的名称相同,则会出现命名冲突。 此外,可能将更多代码导入到程序中,而不是你所需要的。

函数模块

可以使用模块存储在不同程序中使用的一组函数,即使这些函数未附加到任何一个类。 为此,将函数保存到一个文件中,然后导入该文件,就像在上一节中看到的那样。 这是一个非常简单的例子; 保存到文件multiplying.py:

# Save as multiplying.py
def double(x):
    return 2*x

def triple(x):
    return 3*x

def quadruple(x):
    return 4*x

现在可以导入文件multiplying.py,并使用这些函数。 使用from module_name import function_name语法:

from multiplying import double, triple, quadruple

print(double(5))
print(triple(5))
print(quadruple(5))
10
15
20

使用 import module_name 语法:

import multiplying

print(multiplying.double(5))
print(multiplying.triple(5))
print(multiplying.quadruple(5))
10
15
20

使用 import module_name as local_module_name语法:

import multiplying as m

print(m.double(5))
print(m.triple(5))
print(m.quadruple(5))
10
15
20

使用 from module_name import * 语法:

from multiplying import *

print(double(5))
print(triple(5))
print(quadruple(5))
10
15
20
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bai666ai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值