为什么str不能得到第二个参数,当__str__可以?

时间:2011-09-08 19:35:43

标签: python string methods tree operator-overloading

我决定用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。我对这种行为感兴趣。我知道这不是打印树的最佳方式,它是一种黑客攻击;)

2 个答案:

答案 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()本身只接受一个论点。