【发布时间】:2016-09-15 15:54:20
【问题描述】:
编码异常类,我遇到了这个错误:
TypeError: object.__new__(A) is not safe, use Exception.__new__()
这里发布了一个类似的问题:
TypeError: object.__new__(int) is not safe, use int.__new__()。所以__new__ 被弃用的原因如下:
[Python-Dev] __new__ deprecation
吉多·范罗森
“消息的意思就是它所说的。:-) 打电话是没有意义的
object.__new__()具有多个类参数,以及任何代码 这样做只是将这些 args 倾倒到一个黑洞中。”
但是 3.3 中我得到“不安全”的警告是可怕的。我试图理解使用object.__new__ 的含义,让我们考虑这个例子:
>>> class A(Exception):
... def __new__(cls, *args):
... return object.__new__(A)
...
>>> A()
TypeError: object.__new__(A) is not safe, use Exception.__new__()
惨败。另一个例子:
>>> class A(object):
... def __new__(cls, *args):
... return object.__new__(A)
...
>>>
>>> A()
<__main__.A object at 0x0000000002F2E278>
工作正常。尽管object 是一个内置类,就像Exception 就它们的角色而言,它们具有内置类的特征。现在有了Exception,第一个例子提出了TypeError,但是有了object,它没有吗?
(a) 使用object.__new__ 导致 Python 在第一个示例中引发错误 (TypeError:...is not safe...) 的缺点是什么?
(b) 在调用__new__ 之前,Python 会执行什么样的检查?或者:第一个例子中 Python 报错的条件是什么?
【问题讨论】:
标签: python