python自定义类运算符重载

gen*_*gen 3 python oop class operator-overloading

假设我有一个班级:

class Cat:
    def __init__(self, name = "default", age = 0):
        self.name = name
        self.age = age
Run Code Online (Sandbox Code Playgroud)

我还有一个猫列表:

l = [Cat('Joe')]
Run Code Online (Sandbox Code Playgroud)

现在我不能打电话给以下人员:

if 'Joe' in l: # the right syntax would be if Cat('Joe') in list
Run Code Online (Sandbox Code Playgroud)

我需要哪个运算符重载才能将identify类Cat对象的by成员变量name?

Sau*_*tro 5

您必须定义__eq__方法,如下所示:

class Cat:

    def __init__(self, name = "default", age = 0):
        self.name = name
        self.age = age

    def __eq__(self, other):
        if isinstance(other, str):
            return self.name == other
        elif isinstance(other, Cat):
            return self.name == other.name
Run Code Online (Sandbox Code Playgroud)

这样当你运行支票时:

l = [Cat('Joe')]

'Joe' in l
#True
Run Code Online (Sandbox Code Playgroud)

  • OP应该定义`__hash __()`以便它可以使用sets/dicts.请参阅[数据模型文档](http://docs.python.org/2.7/reference/datamodel.html). (3认同)