如何导入上层目录中的Python类?

312 投票
11 回答
392538 浏览
提问于 2025-04-15 12:32

我想从一个位于当前目录上面的文件里的类进行继承。

这样做可以相对导入那个文件吗?

11 个回答

104

@gimel的回答是正确的,前提是你能保证他提到的包的层级结构。如果你不能保证这一点——如果你的真实需求如你所说,完全与目录相关,而与打包没有必要的关系——那么你需要使用 __file__ 来找出父目录(调用几次 os.path.dirname 就可以做到;-),然后(如果那个目录还不在 sys.path 中)临时把这个目录放到 sys.path 的最前面,接着使用 __import__ 导入,最后再把这个目录移除——这确实是个麻烦的工作,但“必须做的时候就得做”(而Python努力不阻止程序员做那些必须做的事情——就像ISO C标准在其前言的“C的精神”部分所说的那样!)。

这里有一个可能对你有用的例子:

import sys
import os.path
sys.path.append(
    os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))

import module_in_parent_dir
199

当然可以!请看下面的内容:

在编程中,有时候我们需要让程序在特定的条件下执行某些操作。比如说,当用户点击一个按钮时,程序就要做出反应。这个过程就像是给程序设定了一些“规则”,让它知道在什么情况下该做什么事情。

另外,程序中有很多不同的部分,它们可以互相交流。就像人们在聊天一样,程序的不同部分通过发送信息来合作完成任务。这种信息的传递方式就叫做“消息传递”。

在编写代码时,我们常常需要使用一些工具和库,这些工具就像是程序的“助手”,可以帮助我们更快地完成工作。使用这些工具可以让我们避免从头开始编写所有的代码,节省时间和精力。

总之,编程就像是在给计算机下指令,让它按照我们的想法去做事情。通过设置条件、使用工具和进行信息交流,我们可以创建出各种各样的程序。

希望这些解释能帮助你更好地理解编程的基本概念!

import sys
sys.path.append("..") # Adds higher directory to python modules path.
246

from ..subpkg2 import mod

根据Python的文档:在包的层级结构中,使用两个点。正如导入语句的说明所说:

当你指定要导入哪个模块时,不需要写出模块的完整名称。如果一个模块或包包含在另一个包里,你可以在同一个顶层包内进行相对导入,而不需要提到包的名称。通过在from后面指定的模块或包前加上点,你可以指定要向上走多少层包的结构,而不需要写出确切的名称。一个点表示当前模块所在的包。两个点表示上升一个包层级。三个点表示上升两个层级,依此类推。所以如果你在pkg包中的一个模块里执行from . import mod,你最终会导入pkg.mod。如果你在pkg.subpkg1中执行from ..subpkg2 import mod,你将导入pkg.subpkg2.mod。关于相对导入的具体说明可以在PEP 328中找到。

PEP 328 讨论了绝对导入和相对导入。

撰写回答