我试图了解我在做的事情是否有意义/是否是一个好的模式。
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对象,该对象具有我正在做的一些内部函数,希望它是一个闭包(例如,某种程度上保存了它的环境)。
在代码本身可以正常工作的同时,我想知道这是否有意义以及我是否在做某些天生的错误。
答案 0 :(得分:1)
这种方法没有什么问题:它避免为每种“化合物” Filter
创建单独的类。但是,可能会期望使用lambda:
return Filter(lambda x: self(x)&other(x),…)
那只是语法:它以self
和other
两种方式关闭。