Python如何处理导入的子类?
我正在从事一个项目,该项目要求我在一个文件中构建几个类和子类,并在第二个文件中使用它们。我想问一下Python如何处理将第一个文件导入第二个文件的问题 例如,如果我有一个文件my_classes.py:Python如何处理导入的子类?,python,class,import,subclass,Python,Class,Import,Subclass,我正在从事一个项目,该项目要求我在一个文件中构建几个类和子类,并在第二个文件中使用它们。我想问一下Python如何处理将第一个文件导入第二个文件的问题 例如,如果我有一个文件my_classes.py: class Myclass(object): pass class Mysubclass(myclass): pass 使用以下代码是否有效: from my_classes import Myclass print Mysubclass (其中,print命令只是使用M
class Myclass(object):
pass
class Mysubclass(myclass):
pass
使用以下代码是否有效:
from my_classes import Myclass
print Mysubclass
(其中,print
命令只是使用Mysubclass
的一个示例),还是需要显式导入Mysubclass
提前谢谢 这行不通。Python
import
语句不关心子类。事实上,它什么都不在乎。它完全按照你让它做的去做。“显式优于隐式”是Python界流行的一句话
在这里:
您告诉Python只导入Myclass
这将导入两个类:
from my_classes import Myclass, Mysubclass
您可以阅读Python
import
的工作原理。如果这样做,您的子类将不可用。必须单独导入每个对象
这里有一个简单的例子
test_class.py
类MyClass(对象):
def初始化(自身):
打印自我。类
class MySubClass(MyClass):
def __init__(self):
print self.__class__
test\u class\u import.py
从测试类导入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
MyClass()
MySubClass()
##输出##
回溯(最近一次呼叫最后一次):
文件“test_class2.py”,第4行,在
MySubClass()
NameError:未定义名称“MySubClass”
但是
从测试类导入MyClass,MySubClass
MyClass()
MySubClass()
##输出##
每个模块都有一个名称空间
命名空间是从变量名到值(Python对象)的映射
声明
import my_classes
通过将变量名my_classes
放置在当前模块的命名空间中,使当前模块可以访问my_classes
命名空间。然后,您可以使用以下语法访问my_class
中的值
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
但这种形式的进口是不公平的
加载整个模块my_类
,但仅加载
将变量名
Mysubclass
和MyClass
放在当前模块的命名空间中。它们指向的值与myu类
命名空间中同名变量的值相同。您无法从my_class
模块的名称空间访问任何其他内容。为什么不试试这段代码,看看是否有错误?这似乎是显而易见的解决方案,确实回答了我的问题。不过,我想了解一些背景信息,了解Python为什么会这样做(例如,为什么导入类时不会自动加载子类)。谢谢!你提供的链接有点超出我的理解,但回答了我的问题。
import my_classes as MC
print MC.Mysubclass
print MC.MyClass
from my_classes import Mysubclass, MyClass
from my_classes import Mysubclass, MyClass