繁体   English   中英

使用Python进行后期处理的优雅方式

[英]Elegant way of doing post-processing using Python

考虑以下在python中使用继承的后处理示例(来自此网站 ):

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个返回相同类型数据的不同函数( cat1cat2cat3等),而我们想使用后处理的NoEmpty版本,则必须在FileCatNoEmpty定义相同的100个函数签名只是转接电话。

所以问题是:是否有更优雅的方法来解决此问题?

也就是说,类似于FileCatNoEmpty类的东西可以自动使FileCat所有方法可用,但仍然允许我们处理返回的值吗?

就像是

class FileCatNoEmpty(FileCat):
    # Any method with whatever arguments
    def f(self,args): 
        lines = super(FileCatNoEmpty, self).f(args)    
        nonempty_lines = [l for l in lines if l != '\n']
        return nonempty_lines

也许甚至还有一个不使用继承的解决方案。

谢谢!

这个答案使用一个包装器类,该包装器类在构造函数中接收原始类(而不是从其继承),从而解决了以下问题:

https://stackoverflow.com/a/4723921/3444175

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM