我试图了解我在做什么是否有意义/是否是一个好的模式。

Filter是一个可调用的类,用于过滤其他一些类(Dataview),并在调用时返回一个经过过滤的新的dataview对象。

很自然,Filter内部有一个属性,它是特定过滤器的实际功能(filter.funct)

我希望能够创建这样的过滤器:

filterc = filterb&filtera


所以我的Filter类中有以下代码:

def __and__(self, other):
    assert isinstance(other, Filter),"And(Logical operation) between Filters supports only another Filter,got {}".format(type(other))
    def new_funct(dataview):
        return self(dataview)&other(dataview)
    return Filter(funct=new_funct,str_representation=repr(self)+'&'+repr(other))


如您所见,我正在创建一个新的Filter对象,该对象带有我正在做的内部函数,希望它是一个闭包(例如,在某种意义上说,它的环境已保存)。

当代码本身正在运行时,我想知道这是否有意义以及我是否在做某些天生的错误。

最佳答案

这种方法没有错:避免为每种“化合物” Filter创建单独的类。但是,可能需要一个lambda:

return Filter(lambda x: self(x)&other(x),…)


那只是语法:两种方式都以selfother关闭。

关于python - 使用闭包实例化新对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56825743/

10-15 09:53