用户可定义的对象过滤器

时间:2015-08-26 07:18:16

标签: python design-patterns criteria

我有许多需要过滤的大型对象集合。我需要过滤器灵活且用户可定义。

硬编码,它可能看起来像:

selected = set()

for o in objects:
    if o.someproperty == 'ab':
        selected.add(o)

    if o.a == 'a' and 'something' in o.b:
        selected.add(o)

但是我需要能存储在数据库中的东西。

我看到有人提到这是标准(或过滤)模式http://www.tutorialspoint.com/design_pattern/filter_pattern.htm,但我无法找到相关信息。

我希望这些规则能够以简单的格式灵活和可序列化。

上面的内容可能类似于:

someproperty == 'ab'
a == 'a', 'something' in b

规则的每一行都是需要满足的不同事物。如果规则集中的任何行匹配,则包含该对象。但是布尔逻辑应该是相反的(行之间有and而行内有or吗?这是否可以灵活处理各种否定?我该如何解析它?

这个问题有哪些简单的方法?

我的几个例子使用

# example 1
for o in objects:
    if o.width < 1 and o.height < 1:
        selected.add(o)

# example 2
for o in objects:

    if o.type == 'i' or o.type == 't':
        continue

    if not o.color:
        selected.add(o)
        continue

    if o.color == 'ffffff':
        selected.add(o)
        continue

    if o.color == '000000':
        continue

    grey = (o.color[1:3] == o.color[3:5] and o.color[1:3] == o.color[5:7])
    if grey:
        selected.add(o)

0 个答案:

没有答案
相关问题