python: 类重载 "is" 行为
我正在写一个类,这个类可以包装任何对象,包括一些简单的数据类型。我希望“is”这个关键字能够作用于被包装的值,比如说我想要这样的效果:
Wrapper(True) is True -> True
Wrapper(False) is True -> False
Wrapper(None) is None -> True
Wrapper(1) is 1 -> True
请问有没有什么对象的方法可以重写,以实现这种效果呢?
5 个回答
4
一般来说,如果你想测试两个值是否相等(比如 x 是 1、True 或者 None),你可以使用 ==
这个运算符。如果你想用 is
运算符,通常是在检查某个东西是否指向另一个东西,比如 list1 is list2
。
如果你想为 ==
定义一些特殊的行为,可以在你的类定义中添加 __eq__
。
7
is
本身是不能被重载的,但你可能会对其他一些“反射”魔法方法感兴趣,这些方法可能适合你的使用场景(因为你在看这个讨论):
__instancecheck__(self, instance)
这个方法用来检查一个实例是否是你定义的类的实例(比如说用isinstance(instance, class)
来判断)。
__subclasscheck__(self, subclass)
这个方法用来检查一个类是否是你定义的类的子类(比如说用issubclass(subclass, class)
来判断)。
47
不可以。is
、and
和or
这几个东西是不能被重载的。