扩展Python内置类:float

4 投票
2 回答
2872 浏览
提问于 2025-04-18 15:13

我想要改变

float.__str__ 

内置浮点数类型(python 2)的功能

我尝试去扩展这个类。

class SuperFloat(float):
    def __str__(self):
        return 'I am' + self.__repr__()

但是,当我添加它的时候,它变成了一个普通的浮点数

egg = SuperFloat(5)
type(egg+egg)

返回的是浮点数

我最终的目标是让它也

egg += 5

保持为一个超级浮点数

2 个回答

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__
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

这段内容是来自StackOverflow的讨论,涉及一些编程问题。具体的代码块内容没有提供,但通常这些代码块会包含一些示例代码或者相关的技术细节。

在编程中,大家常常会遇到各种各样的问题,像是如何解决某个错误,或者如何实现某个功能。StackOverflow是一个很好的地方,程序员们可以在这里提问和回答问题,分享自己的经验。

如果你是编程新手,看到这些讨论时,不用担心,慢慢来,理解每个概念和代码是一个过程。可以先从简单的例子开始,逐步深入。

记得多动手实践,这样才能更好地理解编程的世界!

6

你需要重写你自己类型中的一些“魔法方法”,比如 __add____sub__ 等等。想了解这些方法的具体列表,可以查看 这里。unutbu 的回答展示了如何重写 __add____radd__,但如果你想让你的子类在任何情况下都能替代内置类型,你还需要重写很多其他的方法。这个页面 提供了一些建议,可以帮助你更轻松地完成这些工作。

撰写回答