【发布时间】:2014-11-28 23:54:03
【问题描述】:
我正在尝试在 Python 中模拟一种称为“前缀树”的东西。
我的班级有__contains__ 方法,所以我可以检查这棵树中是否有给定的单词:
class PrefTree():
...
def __contains__(self, word):
#some code...
...
pt = PrefTree()
...
w = "someword"
if w in pt:
print("Aye, found it.")
但我也想有一些特殊的__contains__ 方法来使用特殊规则检查成员资格。所以我需要“另一个”in 操作员来使用这种方法检查成员资格。实现它的最佳方法是什么?
【问题讨论】:
-
不确定我是否理解您的问题。您不能创建新的运算符。只有一个
in运算符,你可以重载它来做一件事(每个类)。如果你有另一种容器要测试,你可以使用另一个现有的运算符,或者只是给你的类一个方法,以便人们调用obj.specialContains(whatever)。 -
没错,我可以为此添加一个方法,但在我看来,如果我能做到
if w special_in pt,它看起来会更好,更pythonic -
好吧,你不能。您不能定义自己的运算符;您只能为现有运算符定义行为。
-
在使用
in运算符时,我能否以某种方式将其他参数传递给__contains__方法? -
您可以让
__contains__接收一个元组。例如。(a, b, c) in pt在这种情况下,您可能会根据所使用对象的类型或元组中的项目数等有不同的行为。我不建议这种愚蠢的行为。
标签: python operator-overloading overloading