在Python中子类化float类型,无法在__init __()中捕获异常

在Python中子类化float类型,无法在__init __()中捕获异常,第1张

在Python中子类化float类型,无法在__init __()中捕获异常

float
是不可变的,因此它
__init__
初始化 程序基本上是一个空 *** 作-
在那里什么都不会发生,因为
self
对象无法更改(如果它实际上
float
是子类的实例,而不是子类的实例),但是当然必须
float
自己
__init__
根据该假设进行 *** 作;-)。

因此,所有的行动发生在

__new__
中, 构造
适当的,就像其他不可变的类型,如
int
str
tuple
,等。一个普遍的错误是认为它
__init__
是一个构造函数:不是,它以一个已经构造的对象作为它的第一个参数
self
,然后“初始化”它(如果可行,即,如果
self
是可变的!-)-
构造 本身发生在
__new__


因此,您的

float
子类应该开始:

class My_Number(float):  def __new__(cls, float_string):    try: return float.__new__(cls, float_string)    except (TypeError, ValueError): raise My_Error(float_string)

并且您可以删除

__init__
,不需要。现在:

>>> n = My_Number('foo')Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "<stdin>", line 4, in __new__NameError: global name 'My_Error' is not defined

(当然,如果 确实

My_Error
定义了异常类,它会更好;-)。



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5667172.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-16
下一篇2022-12-16

发表评论

登录后才能评论

评论列表(0条)

    保存