Python嵌套包问题

标签 python nested package

我一直在努力解决这个问题,我一定是遗漏了一些基本的东西(原谅我,我是 Python 开发的新手):

我有一个这样的包结构:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py

我的类(class)相当温和:

class Class1(object):

    def __init__(self):

    # some methods...


class Class2(object):

    def __init__(self):

    # more methods...

Main.py 中,我有:

import utils

if __name__ == '__main__':
    c1 = utils.Class1()
    c2 = utils.Class2()

我的 PYTHONPATH 设置为包括 srcsrc\basesrc\base\utils。但是,Python 在尝试运行 Main.py 时给我这个错误:

AttributeError: 'module' object has no attribute 'Class1'

有没有人遇到过这个,你知道如何解决吗?谢谢!

最佳答案

这与 Java 略有不同。在java中每个文件通常是一个类,在python中,每个文件是一个模块。鉴于您在此处描述的场景,您将执行以下操作:

import utils.Class1
import utils.Class2

if __name__ == '__main__':
    c1 = utils.Class1.Class1()
    c2 = utils.Class2.Class2()

您可以在这里做很多事情。例如,您可以有一个名为“资源”的模块,如下所示:

base ->
    utils ->
        resources.py

其中包含 Class1 和 Class2。然后你可以这样做:

import utils.resources


c1 = utils.resources.Class1()

等但关键是 classes != python 中的文件

关于Python嵌套包问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9507896/

相关文章:

python - 使用模板输出 HTML,数据使用 JSON

python - 经历多个多对多关系的Django ORM方式

php - JSON 解码嵌套数组 PHP 循环

python 列表作为嵌套列表的索引

linux - 为什么人们使用 tarball?

python - 根据另一个类在 django 中动态加载特定应用程序的最佳方法是什么?

python - 使用 cython 将 c++ 函数暴露给 python

c# - 在 C# 中引用嵌套类对象

python - 在子包之间共享模块的最佳实践是什么?

linux - 在包中创建经典的小型 Linux 应用程序的教程/指南 (Debian)