python - float 子类以改变摄入量和 __str__ 行为

标签 python python-3.x subclass

我对 float 进行了子类化以更改其 __str__() 方法以一个符号结尾(在我的例子中为 €)。

输入被过滤以删除一个符号(在我的例子中是 €)。

class Euro(float):
    def __new__(cls, value):
        v = ''.join([_ for  _ in value if _ != '€' ])
        return super(Euro, cls).__new__(cls, v)

    def __str__(self):
        return f'{self} €'

但是当我打印时,出现递归打印错误。

g = Euro('123.23 €')
print (g) 

错误:

Euro.py, line  __str__
    return f'{self} €'

 [Previous line repeated 329 more times]

RecursionError: maximum recursion depth exceeded

最佳答案

使用super()调用父类的方法,避免递归错误。

def __str__(self):
    return super().__str__() + ' €'


>>> g = Euro('123.23 €')
>>> print(g)
123.23 €

关于python - float 子类以改变摄入量和 __str__ 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60360569/

相关文章:

java - 成员会被编译成子类的.class 文件吗?

Ruby:为每个子类执行代码

python - 编码器一热混淆

python - Django 上的 Mysql 错误

python - 使用 QDataWidgetMapper 立即更改模型

python - 按特定列将不同行的列合并为一个行组

python pandas read_csv 在制表符分隔文件中无法识别\t

python - python dict 到 json 二进制字符串的最快方法

python - 制作统计程序

java 如何获取子类中的父类(super class)引用