在子目录中实例化类时出现问题

2024-07-01 07:54:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在子目录中有一个模块,当我尝试导入它时,我得到一个NameError: namefoois not defined。当我将类代码直接放入__main__.py文件时,它工作得很好__init__.py文件为空

我尝试了以下所有错误:

MyProject/
├── __init__.py
├── __main__.py
├── foo/
│   ├── bar.py
│   ├── __init__.py

条形图

class Bar:
    def __init__(self):
        print( 'am here' )
        pass

\uu main\uuuuuuuuuuuuy.py

from MyProject import foo
#from MyProject import bar # errors with cannot import bar from MyProject
#from foo import bar # errors with No module named foo

if __name__ == '__main__':
    w = Bar()

有没有更好的方法来组织这个


Tags: 模块文件frompyimportfooinitmain
3条回答

Bar类在文件bar.py中,因此我认为您需要这样做

from MyProject.foo import bar
w = bar.Bar()

或者

from MyProject.foo.bar import Bar
w = Bar()

如果您不知道将运行哪个目录文件,那么使用.来显示包的位置

from .foo.bar import Bar

或者

from .foo import bar
w = bar.Bar()

或者

import .foo
w = foo.bar.Bar() 

.在包名之前表示包与当前文件锁定在同一目录中

您没有共享您的foo/__init__.py,但是您可以通过向其中添加类似的内容来解决此问题:

from .bar import Bar

这会将Bar添加到foo的命名空间中,并使Python在导入foo时找到Bar

不过,您最好看看几个编写软件包的标准示例。首先,您可能不应该将项目命名为MyProject,因为该名称表示它是一个类(带有TitleCase)。将其命名为“project”会进一步混淆这个问题,因为似乎您正在编写一个,所以my_package听起来是对的

相关问题 更多 >

    热门问题