簡體   English   中英

Python - 從 float 繼承並調用 str 和 repr 時出現遞歸錯誤

[英]Python - recursion error when inherit from float and call str and repr

為了好玩,我正在測試 Python 中的一些功能;)但是我有一個我不明白的遞歸錯誤

class Test(float):
    def __new__(cls, value):
        return super().__new__(cls, value)

    def __str__(self):
        return super().__str__()
    
    def __repr__(self):
        return f'<value: {str(self)}>'


test = Test(12)
test

return super().__str__()應該調用float.__str__()並且只返回 '12'

你有什么想法?

你的__repr__調用你的__str__ ,它調用超級的__str__ ,它遵循repr ,它調用你的__repr__ ,這是一個無限遞歸。 您可以在__repr__方法中調用super().__repr__ ,而不是調用str(self)

class Test(float):
    def __new__(cls, value):
        return super().__new__(cls, value)

    def __str__(self):
        return super().__str__()
    
    def __repr__(self):
        return f'<value: {super().__repr__()}>'
>>> Test(12)
<value: 12.0>

核心問題是float.__str__(self)將調用self.__repr__()而不是float.__repr__(self)

這不僅意味着您有從Test.__repr__Test.__str__float.__str__Test.__repr__ .__repr__ 的無限遞歸,這意味着Test.__str__將打印與Test.__repr__相同的東西,我假設你不想要,因為你努力重新實現它。

相反,我認為你想要:

class Test(float):
    def __str__(self):
        return super().__repr__()
    
    def __repr__(self):
        return f'<value: {super().__repr__()}>'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM