我正在开发一个项目,我正在向某些人添加已经广泛的代码。该项目非常复杂,但基本原则是有许多文件需要解析(每个文件都有不同的解析器,具体取决于文件包含的内容),而我所做的就是为现有的解析器添加一个新的解析器。
唯一的问题是我已经花了很多时间将我的解析器编写为一个独立的程序,因此设计它的方式与原作者的方法不一致(例如,他的每一个解析器是Parser()的子类,并继承了一些东西。
我的解析器与他的主要区别在于他的每个解析器都只是一个处理所有解析的类(xParser,yParser等),而我的解析器使用两个类中的一个取决于输入格式。
我的问题是,我可以将这两个类包装在一个外部类下并让它们作为类中的类存在吗?否则我将不得不彻底改变我的代码或改变整个项目。我知道这肯定不是理想的做事方式,我可以在将来改变它,但这是短期内可接受的解决方案吗?
谢谢!
答案 0 :(得分:1)
更简单的解决方案是,只要两者的输入和输出大致相同,您就可以编写一个继承自Parser的虚拟类。这个虚拟课将有一个你的独立课程的实例,并打电话给你的班级'你过度使用的继承的Parser方法中的方法。
伪代码:
class ParserZZ(Parser):
def __init__(self, whatever):
self.myparser = MyParser(whatever)
def parse(self, foo):
return self.myparser.parse(foo)
您可以根据需要轻松地重构它,它将更好地与现有代码库相互影响。唯一的主要问题是这会破坏你的代码。我会认真考虑完全重做课程,或者在这里或那里从你的独立课程中复制一点。我保证它不会像你想象的那样糟糕,它将为你节省未来的麻烦。
答案 1 :(得分:0)
如果唯一的问题是"它是否有效?" - 为什么不试试呢:
>>> class a:
... class b:
... def c(self):
... print('d')
...
>>> a().b().c()
d
是的, 可以正常工作,如果你需要(/想要)这里有一些快速而又肮脏的解决方案。