Python嵌套包问题

Python嵌套包问题,python,nested,package,Python,Nested,Package,我已经尝试了一段时间来解决这个问题,我一定是缺少了一些基本的东西(请原谅,我对Python开发比较陌生): 我有这样一个包结构: base | -->util __init__.py Class1.py Class2.py __init__.py Main.py base -> utils -> resources.py 我的课程相当温和: class Class1(object): def __init__(se

我已经尝试了一段时间来解决这个问题,我一定是缺少了一些基本的东西(请原谅,我对Python开发比较陌生):

我有这样一个包结构:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py
base ->
    utils ->
        resources.py
我的课程相当温和:

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
设置为包括
src
src\base
src\base\utils
。但是,Python在尝试运行
Main.py
时给了我这个错误:

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

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

您是否将类导入到utils模块的main.py中? 只需添加到utils/init.py:

from Class1 import Class1
from Class2 import Class2

然后在main.py中,“import utils”将这些文件作为utils.Class1等导入

您是否将类导入utils模块的main.py? 只需添加到utils/init.py:

from Class1 import Class1
from Class2 import Class2

然后在main.py中,“import utils”将这些文件作为utils.Class1等导入

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

import utils.Class1
import utils.Class2

if __name__ == '__main__':
    c1 = utils.Class1.Class1()
    c2 = utils.Class2.Class2()
你可以在这里做很多事情。例如,您可以有一个名为“资源”的模块,如下所示:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py
base ->
    utils ->
        resources.py
它同时包含Class1和Class2。然后你可以做一些类似的事情:

import utils.resources


c1 = utils.resources.Class1()

等等,但关键是要有职业!=python中的文件这与Java略有不同。在java中,每个文件通常是一个类,在python中,每个文件是一个模块。根据您在此处描述的场景,您将执行以下操作:

import utils.Class1
import utils.Class2

if __name__ == '__main__':
    c1 = utils.Class1.Class1()
    c2 = utils.Class2.Class2()
你可以在这里做很多事情。例如,您可以有一个名为“资源”的模块,如下所示:

base
|
 -->util
    __init__.py
    Class1.py
    Class2.py
__init__.py
Main.py
base ->
    utils ->
        resources.py
它同时包含Class1和Class2。然后你可以做一些类似的事情:

import utils.resources


c1 = utils.resources.Class1()

等等,但关键是要有职业!=python中的文件不将文件命名为内部的类。这是一种坏习惯,因为你不知道某事物是一门课还是一个包。对模块(文件)仅使用小写名称。不要将文件命名为其中的类。这是一种坏习惯,因为你不知道某事物是一门课还是一个包。模块(文件)只能使用小写名称。谢谢!这一针见血:)我错误地利用了以前的OO知识:)谢谢!这一针见血:)我错误地利用了以前的OO知识:)