Python:float的子类可以在其构造函数中接受额外的参数吗?

在Python3.4中,我想创建一个子类float——它可以用于数学和布尔运算,比如float,但有其他自定义功能,并且可以在初始化时接收控制该功能的参数。(具体来说,我想要一个自定义的\uuuu str\uuuu和一个在该方法中使用的参数。)

然而,我似乎无法使float的子类具有函数式的双参数构造函数。为什么?这仅仅是对扩展内置类型的限制吗

例如:

类Foo(浮动):
定义初始值(自身、值、额外):
super()。\uuuu init\uuuu(值)
额外的

现在如果我尝试Foo(1,2)

类型错误:float()最多接受1个参数(给定2个)

令人惊讶的是,我的新\uuuuu init\uuuu的参数也被强制执行,因此如果我执行Foo(1)我会得到:

TypeError:\uuuuu init\uuuuu()缺少1个必需的位置参数:“额外”

这是怎么回事?我对list的子类型也做过类似的事情,我很惊讶它在float上不起作用

由于float是不可变的,所以您还必须覆盖\uuuu new\uuu。以下操作应满足您的要求:

类Foo(浮动):
定义新(自身、价值、额外):
返回浮点值。\uuuu新\uuuuu(自身,值)
定义初始值(自身、值、额外):
浮动。初始值(值)
额外的
foo=foo(1,2)
打印(str(foo))
1
打印(str(foo.extra))
2.

另请参见在Python中对浮点类型进行子分类,在_uinit__;()中捕获异常失败

发表评论