我在名为my_class.py的文件中创建了以下Class:
#!/usr/bin/env python
class MyClassA:
def __init__(self):
pass # do something
class MyClassB:
def __init__(self):
pass # do something
当我导入该模块时,我得到了这个:
>>> import my_class
>>> a = MyClassA()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'MyClassA' is not defined
如果我这样做:
from my_class import MyClassA
它有效...有没有办法可以导入该文件中的所有类(模块),如果有更多而且没有使用&#34;来自X import Y&#34;声明?
答案 0 :(得分:1)
你必须告诉python MyClassA
在my_class
。
>>> import my_class
>>> a = myclass.MyClassA()
>>>
答案 1 :(得分:1)
my_class是您要导入的模块。语法方面,my_class.py中定义的类,变量等是导入模块的属性。使用:
import my_class
ca = my_class.MyClassA()
或者如果您想经常访问my_class,可以在导入时更改标识符:
import my_class as mc
ca = mc.MyClassA()
这是iirc最狡猾的方式。再进一步说明:
from my_class import MyClassA
ca = MyClassA()
基本上与:
相同import my_class
MyClassA = my_class.MyClassA
ca = MyClassA()
在两种变体中,my_class都将被预编译和导入。 the docs也可能会有所帮助。
答案 2 :(得分:1)
当您引用MyClassA时,Python无法识别它,因为您已在当前文件之外定义它,告诉它在哪里查看您需要使用定义它的文件名来引用它:{{1 }}。
如果您不希望每次引用该文件中的变量时都必须写出a = my_class.MyClassA()
,则可以使用my_class.example
这意味着您可以缩短代码,因为现在可以使用import my_class as mc
1}}。这是通用导入(a = mc.MyClassA()
)的首选解决方案,因为它清楚地显示了变量的来源,提高了可读性,并避免了模块之间的任何可能的冲突。