跳至主要内容

如何从文件中导入类

How to Import a Class in Python

在 Python 中,你可以从另一个文件导入类,这在代码组织、可维护性和协作方面提供了大量好处。此功能允许程序员利用预先存在的代码模块,从而使他们的程序更高效、更简洁。通过导入,开发人员可以访问和利用这些类提供的功能,而无需从头开始重写整个代码。在本文中,我们将探讨如何从另一个Python 文件导入类。

导入和属性

Python 中的 import 语句允许我们使用提供附加功能的外部模块和。Python 中的属性是指我们可以访问和修改的对象关联的属性或值。

使用 import 命令在 Python 中导入模块

我们可以在 Python 中使用 import 语句导入提供附加功能的外部模块和包。例如,要在 Python 中使用 math 模块,我们可以编写

import math
print(math.pi)

导入模块后,我们可以使用其函数和属性。

在 Python 中使用属性

在 Python 中,我们可以使用 . 符号访问对象的属性。例如,给定一个对象 obj,我们可以使用 obj.attribute 访问其属性。例如,考虑以下类定义

import math
class Circle:
    def __init__(self, radius):
        self.radius = radius
        self.area = math.pi * radius ** 2
c = Circle(2)
print(c.radius)  # Output: 2
print(c.area)  # Output: 12.566370614359172

在这里,我们定义了一个类 Circle,它表示具有给定 radius 的圆。我们使用 math 模块使用公式 pi * radius ** 2 计算圆的面积。

请注意,我们将面积的值分配给对象的属性 area。在这里,我们使用 radius 2 创建 Circle 类的实例 c。然后,我们使用 . 符号访问其属性。我们打印 radiusarea 属性的值,它们分别是 212.57(约数)。

使用 from 语句导入单个类

让我们探讨如何使用 from 关键字从另一个 Python 文件导入单个类。

你可以通过指定文件名和要导入的类来实现此目的,如下所示:from my_module import MyClass

在此示例中,我们从名为 my_module 的文件中导入 MyClass 类。然后,我们可以创建 MyClass 的实例并根据需要使用其方法。

例如:from path.to.my_module import MyClass。我们从位于特定路径(path/to/my_module)的文件中导入MyClass类。当您希望导入的文件位于项目的子目录中时,这很有用。

在 Python 中,从另一个文件中导入类是一个简单的过程,它允许我们利用导入文件提供的优势。

导入多个类

在 Python 中,可以通过列出类名并用逗号分隔它们,从模块中导入多个类。

例如,您可以按如下方式从名为module_name的模块中导入class1class2class3from module_name import class1, class2, class3

或者,您可以使用from module_name import *语法从 module_name 导入所有类。但是,值得注意的是,不建议使用这种方法,因为它会导致命名冲突,尤其是在不同模块中存在多个同名类时。

使用 from 命令从模块导入所有类

要在 Python 中从模块导入所有类,可以使用*符号。这允许您在从不同目录中的另一个文件中导入时不必指定每个单独的类名。

假设我们有一个名为my_module.py的模块,其中包含类Class1Class2

# my_module.py

class Class1:
    pass
    
class Class2:
    pass

要将my_module.py中的所有类导入到另一个脚本中,可以使用以下语法

# script.py

from my_module import *

这将把Class1Class2都导入到script.py中。

如果您只需要从模块中使用一个类,通常最好更具体地说明您要导入的内容,以避免任何潜在的命名冲突或性能问题。

假设我们有一个名为my_module.py的模块,其中包含类Class1Class2

# my_module.py

class Class1:
    pass

class Class2:
    pass

要仅将Class1导入到另一个脚本中,可以使用以下语法

# script.py

from my_module import Class1

这将仅将Class1导入到script.py中。

使用别名导入类

在 Python 中,我们可以使用别名导入类,以使我们的代码更具可读性和简洁性。别名允许我们为类使用更短、更方便的名称,而无需在每次使用时都键入其全名。

# Importing the math module and aliasing it as m
import math as m

# Calculating the square root of 4 using the math.sqrt() method
print(m.sqrt(4))  # Output: 2.0

在此示例中,我们导入math模块并将其别名为m。这允许我们在整个代码中使用m作为math的简写。然后,我们使用m.sqrt()方法计算 4 的平方根并打印结果。

# Importing the square and cube functions from the math module and aliasing them as sq and cu
from math import sqrt as sq, pow as cu

# Calculating the square root of 4 using the sq() function
print(sq(4))  # Output: 2.0

# Calculating the cube of 3 using the cu() function
print(cu(3, 3))  # Output: 27.0

在此示例中,我们从math模块导入sqrtpow函数,并分别将它们别名为sqcu。这允许我们在整个代码中使用sqcu作为sqrtpow的简写。然后,我们使用sq()函数计算 4 的平方根,并使用cu()函数计算 3 的立方,并打印结果。

总体而言,使用别名可以使我们的 Python 代码更简洁、更易于阅读,尤其是在处理复杂的类或模块时。

从子模块或包导入类

要在 Python 中从另一个文件/模块导入类,我们可以使用import关键字,后跟定义类的模块或文件名称,然后使用点语法访问该类。

假设我们有一个模块my_module.py,其中定义了一个类MyClass。要将该类导入到另一个文件中,我们可以执行from my_module import MyClass

假设我们有一个名为example的包,其中包含一个子模块utils,其中定义了一个类MyUtils。要将该类导入到另一个文件中,我们可以执行

# we are importing the class MyUtils from the utils submodule inside the example package
# from example.utils import MyUtils

# creating an instance of MyUtils
# obj = MyUtils()

导入类后,我们可以通过使用带括号的构造函数创建它的实例。

使用 sys.path 从父目录导入类

Python 中的sys模块提供了对各种特定于系统的参数和函数的访问。sys.path列表是此模块中的一个属性,其中包含 Python 搜索模块的目录。要从默认搜索路径之外的目录导入类或模块,您可以操作此列表。

以下是从父目录中的另一个文件夹导入所有类的分步指南

  1. 识别目标目录:首先,您需要确定要从中导入类的目录。此目录应位于当前脚本的父目录中。
  2. 更新sys.path:要将目标目录添加到sys.path,可以使用sys.path.append()方法。例如
import sys
sys.path.append('/path/to/your/directory')

'/path/to/your/directory' 替换为目标目录的实际路径。

  1. 导入模块:一旦将目标目录添加到 sys.path,你就可以像在当前目录中一样从该目录导入模块和类。例如
from target_directory import module_name

target_directory 替换为要从中导入的文件夹的名称,将 module_name 替换为要使用的模块或类的名称。

如果你想从目标目录导入所有类或模块,可以使用通配符导入

from target_directory import *

使用通配符导入时要小心,因为它们可能导致命名冲突,使你的代码更难理解。

  1. 导入和使用:导入模块和类后,你可以根据需要在代码中使用它们。请记住,目标目录应包含一个 __init__.py 文件,才能被识别为包。

当需要从位于默认搜索路径之外的目录导入类或模块时,Python 的 import sys 命令可以成为一个强大的工具。通过操作 sys.path 变量,你可以扩展 Python 的功能以包含其他目录,从而可以更有效地组织代码并维护清晰的项目结构。

与我们一起贡献!

不要犹豫,在 GitHub 上为 Python 教程做出贡献:创建一个分支,更新内容并发出拉取请求。

Profile picture for user AliaksandrSumich
Python 工程师,第三方 Web 服务集成专家。
更新:05/03/2024 - 21:52
Profile picture for user angarsky
已审阅并批准