为什么 str 不能获取第二个参数,而 __str__ 可以?
我决定使用 str 以树状结构打印树的内容,使用类似
print tree
树的节点都是用户创建的类的对象,并且我按顺序重载它们的 __str__
魔术方法在缩进 t 选项卡后使用子节点的 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'
但是我无法使用该 t
参数调用 str
,但我可以调用 node.__ str__ (t=4)
。不是str
,只是魔术方法的快捷方式?还是因为解析器拒绝了 str
的附加参数而不检查魔术方法?
PS我对这种行为很感兴趣。我知道这不是打印树的最佳方法,这是一种黑客行为;)
I decided to use str for printing the contents of a tree in tree-like structure,using something like
print tree
The nodes of the tree are all objects of user-created classes and I overload their __str__
magic method in order to use the child nodes' str after indent t tabs like that
def __str__ (self,t=0) :`
return t*'\t' + str(self.label) +':' +'\n'+ str(self.l,t+1)+'\n'+str(self.right,t+1)+'\n'
However I can't call str
with that t
parameter,but I can call node.__ str__(t=4)
.Isn't str
,only shortcut to the magic method?Or is that because the parser rejects additional params to str
without checking the magic method?
P.S. I am interested in the behaviour.I know that's not the best way to print a tree,it was a hack ;)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
想象一下这样的情况。
仅仅因为
__str__
可以接受更多参数,并不意味着str
配置为传递这些参数。Imagine it this way.
Just because
__str__
can take more parameters, doesn't mean thatstr
is configured to pass those parameters through.如果您有一个带有方法
__str__(self, t=0)
的类C
,则str(c)
将调用C。 __str__(c)
将 t 设置为零,如声明的那样。str()
本身只接受一个参数。If you have a Class
C
with a method__str__(self, t=0)
,str(c)
will callC.__str__(c)
which sets t to zero as declared.str()
itself only accepts one argument.