首页 > 解决方案 > __len__ 定义下的打印语句导致控制台输出不断重复

问题描述

我使用 Python 已经很多年了,但并没有过多地涉足类的艺术,因此决定是时候深入了解一下这个主题了。因此,我决定和他们一起玩一下,特别是玩一下 dunder 功能。我做了以下课程:

class TestClass:
    
    def __init__(self,y):
        self.x = [1,2,3]
        self.y = y
    
    def __len__(self):
        print('gottem')
        return len(self.x)
    
    def __str__(self):
        print('gottem again')
        return str(self.y)

一旦我在控制台中实例化该类,所有后续控制台语句都与“gottem”连接,请参见下面的控制台片段:

>>> 1+1
Out[2]: 2

>>> a = TestClass(3)
gottem

>>> 2+2
Out[4]: 4gottem

>>> len(a)
gottem
Out[5]: 3gottem

我已经尝试删除该__len__定义,但我观察到该__str__定义没有类似的行为,这似乎确实像我预期的那样起作用。一旦我重新定义,该行为就会消失a,因此类实例化被删除。我完全不知道是什么原因导致了这种行为,以及为什么它只发生在__len__. 这背后有明显的解释吗?

信息:我正在通过 Spyder 运行 Anaconda 的 Python 3.7.6 发行版。

免责声明:我绝对尝试搜索有关此的一些信息,但我要么不知道要搜索什么,要么正在做一些根本错误的事情,以至于问题甚至不存在。

标签: pythonpython-3.xspyder

解决方案


推荐阅读