[英]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.