考虑以下在python中使用继承的后处理示例(fromthis website):
import os
class FileCat(object):
def cat(self, filepath):
f = file(filepath)
lines = f.readlines()
f.close()
return lines
class FileCatNoEmpty(FileCat):
def cat(self, filepath):
lines = super(FileCatNoEmpty, self).cat(filepath)
nonempty_lines = [l for l in lines if l != '\n']
return nonempty_lines
基本上,当我们进行后处理时,我们并不真正关心原始调用,我们只想处理函数返回的数据。在
因此,在我看来,理想情况下,我们不需要重新声明原始函数的签名,而只是为了能够将其转发给原始函数。在
如果FileCat
类有100个不同的函数(cat1
,cat2
,cat3
,…)返回相同类型的数据,并且我们希望使用后处理的NoEmpty
版本,那么我们就必须在FileCatNoEmpty
中定义相同的100个函数签名来转发调用。在
所以问题是:有没有更优雅的方法来解决这个问题?在
也就是说,类似于FileCatNoEmpty
类,它将自动使来自FileCat
的所有方法都可用,但仍然允许我们处理返回值?在
有点像
^{2}$或者甚至是另一种不使用继承的解决方案。在
谢谢!在
这个答案使用在构造函数中接收原始包装类(而不是从中继承)的包装类解决了问题:
https://stackoverflow.com/a/4723921/3444175
相关问题 更多 >
编程相关推荐