Python如何处理导入的子类?

时间:2014-01-17 14:48:38

标签: python class import subclass

我正在开发一个项目,要求我在一个文件中构建多个类和子类,并在第二个文件中使用它们。我想问一下Python如何处理将第一个文件导入第二个文件。

例如,如果我有一个文件my_classes.py:

class Myclass(object):
    pass

class Mysubclass(myclass):
    pass

将使用以下代码工作:

from my_classes import Myclass

print Mysubclass

(其中print命令只是使用Mysubclass的示例),还是我需要明确导入Mysubclass

提前致谢!

3 个答案:

答案 0 :(得分:0)

这不起作用。 Python import语句不关心子类。实际上,它并不关心任何事情。它正是你告诉它做的。 “明确比隐含更好”是Python界的流行谚语。

下面:

from my_classes import Myclass

你告诉Python只导入Myclass

这将导入两个类:

from my_classes import Myclass, Mysubclass

您可以阅读Python import的工作原理here

答案 1 :(得分:0)

如果您这样做,您的子类将不可用。您必须自己导入每个对象。

这是一个简单的例子

test_class.py     class MyClass(object):         def init (个体经营):             print self。 class

class MySubClass(MyClass):
    def __init__(self):
        print self.__class__

test_class_import.py     来自test_class import MyClass

MyClass()
MySubClass()

##output##
<class 'test_class.MyClass'>
Traceback (most recent call last):
  File "test_class2.py", line 4, in <module>
    MySubClass()
NameError: name 'MySubClass' is not defined

from test_class import MyClass, MySubClass
MyClass()
MySubClass()

##output##
<class 'test_class.MyClass'>
<class 'test_class.MySubClass'>

答案 2 :(得分:0)

每个模块都有一个命名空间。

命名空间是从变量名到值(Python对象)的映射。

声明

import my_classes

通过将变量名my_classes放在当前模块的命名空间中,可以从当前模块访问my_classes命名空间。然后,您可以使用语法

访问my_classes中的值
my_classes.variable

所以,例如:

import my_classes
print my_classes.Mysubclass
print my_classes.MyClass

如果输入太多,我建议

import my_classes as MC
print MC.Mysubclass
print MC.MyClass

你也可以

from my_classes import Mysubclass, MyClass

但这种导入形式为discouraged by some Python experts

from my_classes import Mysubclass, MyClass

仅加载整个模块my_class 将变量名MysubclassMyClass放在当前模块的命名空间中。它们指向的值与my_classes命名空间中同名变量的值相同。您无法访问my_class模块命名空间中的任何其他内容。