python子类是否可以存储在与其超类分离的模块中

python子类是否可以存储在与其超类分离的模块中,python,Python,我已经编写了一些代码,其中包含一个main和一些继承超类变量的子类 例如 main没有显示,也没有用于选择要调用的子类的选项工厂,但希望给出的信息足够 我希望将这些类转换为可以导入的独立模块。 预计将来会编写更多的子类,因此我想知道是否有可能将每个子类和超类保存为单独的模块,并且子类仍然能够使用/访问超类变量和定义 这背后的理由是简化任何未来子类的编写。这意味着它们可以作为一个独立的模块编写,以前的子类和超类在开发过程中不必涉及,但它们仍然能够使用子类变量和定义 我不确定它将如何工作,或者是否可

我已经编写了一些代码,其中包含一个main和一些继承超类变量的子类

例如

main没有显示,也没有用于选择要调用的子类的选项工厂,但希望给出的信息足够

我希望将这些类转换为可以导入的独立模块。 预计将来会编写更多的子类,因此我想知道是否有可能将每个子类和超类保存为单独的模块,并且子类仍然能够使用/访问超类变量和定义

这背后的理由是简化任何未来子类的编写。这意味着它们可以作为一个独立的模块编写,以前的子类和超类在开发过程中不必涉及,但它们仍然能够使用子类变量和定义

我不确定它将如何工作,或者是否可以这样做。我是否只是将所有类保存为superclass.py、subclass 1.py和subclass 2.py并将它们全部导入

希望这是有道理的


谢谢。

是的,完全有可能。只是别忘了在子类文件中导入超类:

from module_where_superclass_is import SuperClass

class SubClass(SuperClass):

    def method1(self):
        # ...

当然,没问题。你就这么做吧

import ModuleWithSuperclass

class subclass1(ModuleWithSuperclass.superclass):
    def method1(self):
        pass
在superclass.py中:

class superclass(object):
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
然后在子类1.py中:

from superclass import superclass
class subclass1(superclass):
    def method1(self):
        pass

可以对命名空间中存在的任何类进行子类化


如果您的超类存在于某个奇怪的位置,您可以通过

将其添加到脚本中,我建议您阅读一下。它将为您提供更多关于如何将类排列成分层排列的模块和包的信息。

是的,显然这是可能的-这就是python的优点

模块1

class base:
    def p(self):
        print "Hello Base"
模块2

from module1 import base

class subclass(base):
    def pp(self):
        print "Hello child"
Python Shell

from module2 import subclass
ob = subclass()
ob.p()
"Hello Base"
ob.pp()
"Hello child"

:)

嗯,它肯定会起作用,但总有一个办法

例如,如果您使用@juliomalegria的答案,您可能会发现很难从父类获取所有子类,也就是说,在python shell中,如果您:

from module_where_superclass_is import SuperClass
SuperClass.__subclasses__()
你什么也得不到,除非你去:

from module_where_superclass_is import SubClass
SuperClass.__subclasses__()

然后您可以看到正确的结果。

从超类访问不同模块中的子类的解决方案如下:

  • 您需要导入带有子类的模块:
importlib.import_模块(“example.module1”)

importlib.import_模块(“其他模块2”)

  • 然后,您可以使用内置方法
    MySuperClass.\uu子类\uuuu()

类结构完全独立于包结构:在
类子类1(超类)
的情况下,请注意
超类
只是一个表达式——只需确保它计算为所需的超类,可能需要导入或诸如此类。(虽然敏感度通常决定包结构和类层次结构是支持的。)我快速浏览了模块教程,但一开始并没有看到我在寻找什么。我会更透彻地阅读它。感谢所有的回复,一旦你知道了,答案总是很简单:),真不敢相信我没有想到只将超类导入子类。透过树林看不见森林。再次感谢,总是能在stackoverflow上找到很多人。@user788462,很高兴我能帮忙!有时候,最容易的事情是很难看到的。如果我们解决了您的问题,请选择最佳答案作为您接受的答案:)
from module_where_superclass_is import SubClass
SuperClass.__subclasses__()