我决定用str来打印树状结构的树的内容,使用像
这样的东西print tree
树的节点都是用户创建的类的对象,我重载它们的__str__
魔术方法,以便在缩进标签之后使用子节点的str
def __str__ (self,t=0) :`
return t*'\t' + str(self.label) +':' +'\n'+ str(self.l,t+1)+'\n'+str(self.right,t+1)+'\n'
但是,我无法使用str
参数拨打t
,但我可以致电node.__ str__(t=4)
。是不是str
,只是魔术方法的快捷方式?或者是因为解析器在不检查魔术方法的情况下拒绝str
的其他参数?
P.S。我对这种行为感兴趣。我知道这不是打印树的最佳方式,它是一种黑客攻击;)
答案 0 :(得分:7)
想象一下。
def str(obj):
try:
return obj.__str__()
except ...:
...
仅仅因为__str__
可以使用更多参数,并不意味着str
已配置为通过这些参数。
答案 1 :(得分:1)
如果您的某个类C
包含方法__str__(self, t=0)
,则str(c)
将调用C.__str__(c)
,将声明设置为零。 str()
本身只接受一个论点。