我在创建可导入的Python包/库/模块或任何正确的命名法时遇到了麻烦。我正在使用Python 3.7
我正在使用的文件结构是:
Python37//Lib//mypackage
mypackage
__init__.py
mypackage_.py
__init__.py
中的代码是:
from mypackage.mypackage_ import MyClass
mypackage_.py
中的代码是:
class MyClass:
def __init__(self, myarg = None):
self.myvar = myarg
然后在我的桌面上尝试运行以下代码:
import mypackage
x = MyClass(None)
但是出现以下错误:
Traceback (most recent call last):
File "C:\Users\***\Desktop\importtest.py", line 3, in <module>
x = MyClass(None)
NameError: name 'MyClass' is not defined
答案 0 :(得分:2)
您尚未将名称MyClass
导入当前的名称空间。您已导入mypackage
。要访问mypackage
中的任何内容,您需要在名称前加上mypackage.<Name>
import mypackage
x = mypackage.MyClass(None)
答案 1 :(得分:1)
正如@rdas所说,您需要在名称前加上mypackage.<Name>
。
我不建议您这样做,但是您可以通配符导入以使x = MyClass(None)
起作用:
from mypackage import *
现在,mypackage
中的所有内容均已导入,并且可以在当前名称空间中使用。但是,您必须谨慎使用通配符导入,因为它们会创建定义冲突(如果多个模块在不同的事物上具有相同的名称)。