2012-10-08 30 views
4

我编写了一个python程序,使用的多个实例包含语法来查看字典和列表。__contains__语法

if not test_map[var].__contains__(string): 

看来,我会的得到更好的使用方法:

if string not in test_map[var]: 

有谁知道可以使用__contains__方法会出现问题?

谢谢,

+0

请参阅http://stackoverflow.com/questions/1022499/emulating-membership-test-in-python-delegating-contains-to-contained-object#1022505 – 2012-10-08 11:39:59

回答

12

这是非常非常丑陋。

如果未来语义发生变化,直接使用实现而不是使用实际的预期顶级语法也会伤害到你。另外,它使得代码难以理解和解释。

很有可能在不知道in使用__contains__()的情况下成为一名称职的Python程序员。我认为相反的是不正确的。

+0

好酷,所以没有使用此问题的主要问题... – felix001

+0

而且一般契约是__之前/之后的方法和函数是“private”,并且可以在没有通知的情况下更改 – svrist

+1

_and_之前的下划线表示不稳定的“专用”接口的注释不准确。代表“神奇”方法即核心协议之前和之后的双倍。这些往往非常稳定。之前(但不是之后)的单个下划线代表软性“保护”属性,并且在双重下划线之前(但不是之后)执行“名称集中”以标记为软 - “私人”。我对这两种方式都表示软性,因为Python不强制执行这种用法,这只是惯例。 – amcgregor