在Python中重载自定义类型的运算符

时间:2014-11-28 23:54:03

标签: python operator-overloading overloading

我正在尝试模仿名为"前缀树"在Python中。

我的班级有__contains__方法,所以我可以查看这棵树中是否有给定的词:

class PrefTree():
    ...
    def __contains__(self, word):
        #some code...
    ...

pt = PrefTree()
...
w = "someword"
if w in pt:
    print("Aye, found it.")

但我也希望有一些特殊的__contains__方法来检查使用特殊规则的成员资格。所以我需要另一个' in运算符使用此方法检查成员资格。实现它的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

__contains__个实现中只有一个应该申请给定的w吗?然后,是什么决定特殊规则或标准规则是否适用? (w的某些特征?)

如果您的班级用户始终可以使用这两个w,那么显然您需要两种不同的方法。

但是,如果有关于w的内容确定要使用哪个实现,则可以定义一个超级类PrefixTree - PrefixTreeBase,比如说 - 包含__contains__的默认实现,然后PrefixTree实现将如下所示:

def __contains__(self, w):
    if self._is_special(w):
        return self._special_rule(w)
    return super().__contains__(w)

_*special*方法实现您的特殊概念。