python:类覆盖"是"行为

Hei*_*ing 18 python

我正在编写一个封装任意对象的类,包括简单类型.我希望"is"关键字对封装的值进行操作,例如此行为:

Wrapper(True) is True -> True
Wrapper(False) is True -> False
Wrapper(None) is None -> True
Wrapper(1) is 1 -> True
Run Code Online (Sandbox Code Playgroud)

是否有任何对象方法可以覆盖以获得此行为?

Ign*_*ams 28

is,and而且or不能超载.

  • 唯一的参考是它们在langref的§3.4中的缺失.http://docs.python.org/reference/datamodel.html#special-method-names (6认同)
  • 这是Python文档中的任何地方吗?找不到任何验证这个的东西. (4认同)
  • @Fran:是的.关于这些运营商的行为没有改变. (2认同)
  • 我想我知道为什么 `is` 不能被覆盖。字典查找和集合查找使用“is”进行快速相等性检查,因为“__eq__”是可重写的并且可能非常慢。如果“is”行为是可重写的,则无法保证快速字典查找,这将不利于 python 的性能。 (2认同)

ale*_*cxe 7

is本身不能重载,但您可能对其他可能适合您的用例的“反射”魔术方法感兴趣(因为您正在查看此线程):

__instancecheck__(self, instance) 检查实例是否是您定义的类的实例(例如isinstance(instance, class).

__subclasscheck__(self, subclass) 检查一个类是否是您定义的类的子类(例如issubclass(subclass, class))。