在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__;()中捕获异常失败