gpt4 book ai didi

python - 如果不调用super().__ init __(),自定义异常类的父级如何获取参数?

转载 作者:行者123 更新时间:2023-12-03 16:17:09 28 4
gpt4 key购买 nike

假设我创建了一个这样的自定义异常类:

class MyError(Exception):
def __init__(self, msg):
pass

raise MyError('this is an error')

# Traceback (most recent call last):
# File "<stdin>", line 1, in <module>
# __main__.MyError: this is an error
MyError类不会调用 super().__init__(),因此我看不到父类学习错误消息( 'this is an error')的任何方法。但是,此代码可以正常工作:错误消息确实存储在对象中的某个位置,并在引发异常时显示。
如何以及为什么这样做?如果我在子类中重写 __init__()而不调用 super().__init__(),我希望父类对错误消息一无所知。我试图为Exception类找到Python代码,但看起来像是 in C,所以我不愿深入研究它。

最佳答案

有点奇怪BaseException同时实现 __new__ __init__ ,并在两种方法中均设置self.args。大多数类仅实现一个或另一个。您只覆盖了__init__,因此__new__仍然接收参数。
如果您覆盖__new__并阻止参数到达BaseException.__new__,则会发现消息丢失:

class MyError(Exception):
def __init__(self, msg):
pass
def __new__(cls, msg):
return super().__new__(cls)

关于python - 如果不调用super().__ init __(),自定义异常类的父级如何获取参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67098512/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com