【发布时间】:2020-09-16 21:46:09
【问题描述】:
考虑以下将__subclasscheck__ 用于自定义异常类型的示例:
class MyMeta(type):
def __subclasscheck__(self, subclass):
print(f'__subclasscheck__({self!r}, {subclass!r})')
class MyError(Exception, metaclass=MyMeta):
pass
现在,当引发这种类型的异常时,会调用 __subclasscheck__ 方法;即raise MyError() 结果:
__subclasscheck__(<class '__main__.MyError'>, <class '__main__.MyError'>)
Traceback (most recent call last):
File "test.py", line 8, in <module>
raise MyError()
__main__.MyError
这里输出的第一行显示__subclasscheck__ 被调用以检查MyError 是否是其自身的子类,即issubclass(MyError, MyError)。我想了解为什么这是必要的,以及它总体上是如何有用的。
我正在使用 CPython 3.8.1 来重现此行为。我还尝试了 PyPy3 (3.6.9),这里 __subclasscheck__ 没有被调用。
【问题讨论】:
标签: python python-3.x exception cpython