1

View 是Python 3的有用构造。对于那些从未注意到的人(比如我):对于d您可以编写的字典k = d.keys(),即使您更新d变量k仍会为您提供更新后的键。你可以写k1 & k2,它会永远给你d1.keys() & d2.keys()

我想为我的个人待办事项管理器实现这个,但我想让复杂的视图动态化,或者懒惰地评估。也就是说,我有一些名为 的视图sopost并且priority我希望能够编写:

    now = so | phone & priority

这样以后,当__repr__(now)调用 时,仅在点执行评估。

我的第一个想法是重载逻辑运算符,因此我更改View.__and__为创建一个新视图,该视图记住自己是两个子视图的组合,&并在计算时应用于它们。但是似乎有相当多的逻辑运算符,所以我不确定我是否做对了。

是否有一个标准库类可以帮助我解决这个问题?如何简化流程?

4

2 回答 2

1

没有“简单”的方法可以做到这一点,特别是如果您想要如上所述的惰性行为。但是,仍然没有那么多逻辑运算符,只有三个__and____or____xor__

(为了提高效率,您可以选择实现就地版本__iand____ior____ixor__,但如果您不这样做,将调用普通版本作为后备)

于 2009-12-30T21:40:42.990 回答
1

好吧,有一个 collection.UserList 类定义了它们中的大多数,也许这意味着您不必覆盖所有它们。

于 2009-07-02T18:16:34.143 回答