Python导入类错误,试图理解根目录__init__.py

时间:2017-06-06 05:58:14

标签: python python-2.7

我只有4天的时间去蟒蛇。我只是想了解root __init__.py导入功能。谷歌搜索很多,以了解相同,但无法找到一个有用的链接(可能是我的搜索键不相关)。请分享一些链接。

我收到错误" ImportError:无法导入名称Person"

以下是结构

Example(directory)
    model
        __init__.py (empty)
        myclass.py
    __init__.py
    run.py

myclass.py

class Person(object):
    def __init__(self):
        self.name = "Raja"

    def print_name(self):
        print self.name

__初始化__。PY

from model.myclass import Person

run.py

from model import Person

def donext():
    person = Person()
    person.print_name()

if __name__ == '__main__':
    donext()

2 个答案:

答案 0 :(得分:1)

该错误基本上表示在您的Person包中,解释器无法找到与给定命名空间中model匹配的任何内容。这是因为它在model.myclass包中,但已导入root而不是run

python中的模块基本上是带有__init__.py脚本的目录。但是从 init 导入根级别的任何内容都很棘手。此外,它没有必要。

好的,这意味着解决方案要么直接从model包导入,要么从rott-level __init__.py导入。我会推荐前一种方法,因为它更常用。你可以这样做:

from model.myclass import Person

def donext():
    person = Person()
    person.print_name()

if __name__ == '__main__':
    donext()

__init__.py留空。它们仅用于初始化,因此无需将所有内容导入它们。

您可以将某些内容添加到model/__init__.py,然后将其导入myclass.py,例如:

__init__.py

something = 0

myclass.py

from . import something
print something

答案 1 :(得分:1)

正如@gonczor建议的那样,您可以简单地将__init__留空(此外,您不需要根源)并直接从包中导入:

Visual

或者,如果您有意想要展平包的界面,这很简单:

模型/ __初始化__。PY

from model.myclass import Person

run.py

from myclass import Person