类中包含的Python类

0 投票
2 回答
1769 浏览
提问于 2025-04-18 17:01

我正在一个项目上工作,这个项目是要在别人已经写好的复杂代码基础上进行扩展。这个项目涉及很多文件,需要根据文件的内容使用不同的解析器来处理,而我只是想在已有的解析器中添加一个新的。

唯一的问题是,我已经花了很多时间把我的解析器写成一个独立的程序,所以我的设计方式和原作者的方法不太一致(比如,原作者的每个解析器都是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)

你可以根据需要轻松调整这个结构,它会和现有的代码更好地互动。唯一需要注意的就是,这样可能会让你的代码变得复杂。其实我建议你考虑完全重写这个类,可能在某些地方借用一下你独立类的代码。我保证这不会像你想的那么糟糕,而且会为你将来省去很多麻烦。

撰写回答