python - __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 发行版。
免责声明:我绝对尝试搜索有关此的一些信息,但我要么不知道要搜索什么,要么正在做一些根本错误的事情,以至于问题甚至不存在。
解决方案
推荐阅读
- java - 为什么 toCharArray() 和 toString() 方法不起作用
- python - 切换散景服务 hbar 图的数据源不起作用:空白图
- python - Python:使用递归查找在字典中实现的二叉树的大小
- javascript - 在 Nuxt 中使用 Vuex
- bash - 在bash中的数字和点之后添加一个字符
- python - 引发除了错误
- python - 未找到带有参数“(12,)”的“编辑”的反向。尝试了 1 种模式:['edit$']
- twilio - 有没有办法从 Twilio 中转移电话号码?
- javascript - 我可以使用角度服务而不在 NgModule 的提供者中提及它吗?
- python - Flask - 向路由中断图像添加参数