首页 > 解决方案 > 如何将类构建到 Python 模块中

问题描述

我有一个类文件fil1.py,在这个文件中,只有一个类叫做f. 我想将这个类文件构建到一个模块中,我尝试过像这样组织我的文件:

foo/
 foo/
    __init__.py
    file1.py # where class resides
 setup.py
 README.md
 LICENSE

在中__init__.py,我有一句话:

from file1 import f

然后,当我在 pypi 上发布然后安装回我的本地计算机时。当我尝试:

from foo import f

我收到一条错误消息:

ImportError: cannot import name 'f' from 'foo'

我也试过

import foo
foo.f

错误消息是:

foo has no attribute f

我不确定如何实现我想要的。

标签: pythonpython-module

解决方案


Python 中没有“类文件”之类的东西。文件是一个模块,模块可能包含零个或多个类、函数或未包含在类或函数中的有效 python 语句(在导入模块时只运行一次)。也就是说,我想你想要:

富/file1.py:

class f:
[...]

foo/__init__.py:

from foo.file1 import f

那么以下所有内容都是有效的(假设foo在 上可用sys.path,其中包括当前工作目录自动作为第一个条目):

import foo
import foo.file1
from foo import f
from foo.file1 import f

foo是一个包(因为它包含__init__.py),其中包含一个名为file1. 或者,您可以在内部使用相对导入__init__.py

from .file1 import f

但这可能会变得混乱,并且在大型项目中通常不受欢迎。


推荐阅读