扩展python内置类:float

Vas*_*sco 3 python class

我想改变

float.__str__ 
Run Code Online (Sandbox Code Playgroud)

float类型的构建函数(python 2)

我试图扩展这个类.

class SuperFloat(float):
    def __str__(self):
        return 'I am' + self.__repr__()
Run Code Online (Sandbox Code Playgroud)

但是,当我添加它时,它变成了正常的浮动

egg = SuperFloat(5)
type(egg+egg)
Run Code Online (Sandbox Code Playgroud)

返回浮动

我的最终目标也是

egg += 5
Run Code Online (Sandbox Code Playgroud)

保持超级浮动

unu*_*tbu 5

class SuperFloat(float):
    def __str__(self):
        return 'I am ' + self.__repr__()
    def __add__(self, other):
        return SuperFloat(super(SuperFloat, self).__add__(other))
    __radd__ = __add__
Run Code Online (Sandbox Code Playgroud)
In [63]: type(5+egg)
Out[63]: __main__.SuperFloat

In [64]: type(egg+5)
Out[64]: __main__.SuperFloat

In [65]: type(egg+egg)
Out[65]: __main__.SuperFloat

In [67]: egg += 5

In [69]: type(egg)
Out[69]: __main__.SuperFloat
Run Code Online (Sandbox Code Playgroud)


Bre*_*arn 5

您将需要重写你的类型的"魔术方法": ,__add__,__sub__等见这里对这些方法的列表.unutbu的答案显示了如何为__add__和执行此操作__radd__,但如果您希望子类在任何情况下都可替换为内置类型,则还有很多必须覆盖的内容. 这个页面提供了一些关于如何使一些工作更容易的建议.