导入自己的python文件,未定义类

时间:2016-04-23 11:17:46

标签: python

我在名为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;声明?

3 个答案:

答案 0 :(得分:1)

你必须告诉python MyClassAmy_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())的首选解决方案,因为它清楚地显示了变量的来源,提高了可读性,并避免了模块之间的任何可能的冲突。