如何解决__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发行版。
免责声明:我绝对试图搜索有关此内容的信息,但我要么不知道要搜索什么,要么做的事情根本上是错误的,甚至根本不存在这些问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。