python子类是否可以存储在与其超类分离的模块中
我已经编写了一些代码,其中包含一个main和一些继承超类变量的子类 例如 main没有显示,也没有用于选择要调用的子类的选项工厂,但希望给出的信息足够 我希望将这些类转换为可以导入的独立模块。 预计将来会编写更多的子类,因此我想知道是否有可能将每个子类和超类保存为单独的模块,并且子类仍然能够使用/访问超类变量和定义 这背后的理由是简化任何未来子类的编写。这意味着它们可以作为一个独立的模块编写,以前的子类和超类在开发过程中不必涉及,但它们仍然能够使用子类变量和定义 我不确定它将如何工作,或者是否可以这样做。我是否只是将所有类保存为superclass.py、subclass 1.py和subclass 2.py并将它们全部导入 希望这是有道理的python子类是否可以存储在与其超类分离的模块中,python,Python,我已经编写了一些代码,其中包含一个main和一些继承超类变量的子类 例如 main没有显示,也没有用于选择要调用的子类的选项工厂,但希望给出的信息足够 我希望将这些类转换为可以导入的独立模块。 预计将来会编写更多的子类,因此我想知道是否有可能将每个子类和超类保存为单独的模块,并且子类仍然能够使用/访问超类变量和定义 这背后的理由是简化任何未来子类的编写。这意味着它们可以作为一个独立的模块编写,以前的子类和超类在开发过程中不必涉及,但它们仍然能够使用子类变量和定义 我不确定它将如何工作,或者是否可
谢谢。是的,完全有可能。只是别忘了在子类文件中导入超类:
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__()
然后您可以看到正确的结果。从超类访问不同模块中的子类的解决方案如下:
- 您需要导入带有子类的模块:
- 然后,您可以使用内置方法
MySuperClass.\uu子类\uuuu()
类子类1(超类)
的情况下,请注意超类
只是一个表达式——只需确保它计算为所需的超类,可能需要导入或诸如此类。(虽然敏感度通常决定包结构和类层次结构是支持的。)我快速浏览了模块教程,但一开始并没有看到我在寻找什么。我会更透彻地阅读它。感谢所有的回复,一旦你知道了,答案总是很简单:),真不敢相信我没有想到只将超类导入子类。透过树林看不见森林。再次感谢,总是能在stackoverflow上找到很多人。@user788462,很高兴我能帮忙!有时候,最容易的事情是很难看到的。如果我们解决了您的问题,请选择最佳答案作为您接受的答案:)
from module_where_superclass_is import SubClass
SuperClass.__subclasses__()