我正在开发一个项目,要求我在一个文件中构建多个类和子类,并在第二个文件中使用它们。我想问一下Python如何处理将第一个文件导入第二个文件。
例如,如果我有一个文件my_classes.py:
class Myclass(object):
pass
class Mysubclass(myclass):
pass
将使用以下代码工作:
from my_classes import Myclass
print Mysubclass
(其中print
命令只是使用Mysubclass
的示例),还是我需要明确导入Mysubclass
?
提前致谢!
答案 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
将变量名Mysubclass
和MyClass
放在当前模块的命名空间中。它们指向的值与my_classes
命名空间中同名变量的值相同。您无法访问my_class
模块命名空间中的任何其他内容。