我只有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()
答案 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