我有一个类,它实现了特定文件格式的解析器。 我想添加对另一种格式的支持。在我看来,这可以通过两种方式实现:
选项1:在同一个类中实现多个解析器方法,检查文件扩展名并调用适当的方法进行处理:
class FileParser:
def __init__(self, file_name):
self.ext = os.path.splitext(file_name)[1]
if self.ext == '.foo':
self.data = self._parse_foo(file_name)
elif self.ext == '.bar':
self.data = self._parse_bar(file_name)
else:
raise TypeError('Wrong file extension')
def _parse_foo(self,file_name):
pass
def _parse_bar(self,file_name):
pass
def do_great_things_with_data(self):
pass
选项2:在子类中为每个文件格式实现解析器。然后创建一个对象工厂,根据文件扩展名选择子类:
^{pr2}$哪种方法更好?各自有哪些优点/缺点?在
如果您事先不知道文件类型,那么我建议第一种方法:有一个类根据文件扩展名选择适当的内部方法。在
第二种方法只有在您事先知道文件类型但不想重复代码时才有用(在我看来)。在
所以还有第三种选择:在模块级别为每种格式定义解析函数。有没有必要把他们放在一个班里?在
一个小例子:
相关问题 更多 >
编程相关推荐