类中包含的Python类
我正在一个项目上工作,这个项目是要在别人已经写好的复杂代码基础上进行扩展。这个项目涉及很多文件,需要根据文件的内容使用不同的解析器来处理,而我只是想在已有的解析器中添加一个新的。
唯一的问题是,我已经花了很多时间把我的解析器写成一个独立的程序,所以我的设计方式和原作者的方法不太一致(比如,原作者的每个解析器都是Parser()的子类,并且继承了一些东西)。
我和他的解析器主要的区别在于,原作者的每个解析器都是一个简单的类(比如xParser、yParser等),负责处理所有的解析工作,而我的解析器目前是根据输入格式使用两个不同的类。
我的问题是,我能否把这两个类放在一个外部类下面,让它们作为内部类存在?否则我就得大幅度修改我的代码,或者改变整个项目。我知道这样做并不是最理想的方式,未来我可能会进行调整,但在短期内这样做可以接受吗?
谢谢!
2 个回答
0
如果你唯一想知道的问题是“它能用吗?”那为什么不直接试试看呢:
>>> class a:
... class b:
... def c(self):
... print('d')
...
>>> a().b().c()
d
是的,它确实能用,如果你只需要(或者想要)一个简单粗暴的解决方案。
1
一个更简单的解决方案是,只要输入和输出大致相同,你可以写一个虚拟类,继承自Parser。这个虚拟类会包含你独立类的一个实例,并在你重写的Parser方法中调用你类的方法。
伪代码:
class ParserZZ(Parser):
def __init__(self, whatever):
self.myparser = MyParser(whatever)
def parse(self, foo):
return self.myparser.parse(foo)
你可以根据需要轻松调整这个结构,它会和现有的代码更好地互动。唯一需要注意的就是,这样可能会让你的代码变得复杂。其实我建议你考虑完全重写这个类,可能在某些地方借用一下你独立类的代码。我保证这不会像你想的那么糟糕,而且会为你将来省去很多麻烦。