Python如何处理导入的子类?

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

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

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

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