您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

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

因此,所有的行动发生在__new__中, 适当的,就像其他不可变的类型,如intstrtuple,等。一个普遍的错误是认为它__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定义了异常类,它会更好;-)。

python 2022/1/1 18:37:00 有228人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶