为什么 str 不能获取第二个参数,而 __str__ 可以?

发布于 2024-12-03 12:45:49 字数 515 浏览 1 评论 0原文

我决定使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

北方。的韩爷 2024-12-10 12:45:49

想象一下这样的情况。

def str(obj):
    try:
        return obj.__str__()
    except ...:
        ...

仅仅因为 __str__ 可以接受更多参数,并不意味着 str 配置为传递这些参数。

Imagine it this way.

def str(obj):
    try:
        return obj.__str__()
    except ...:
        ...

Just because __str__ can take more parameters, doesn't mean that str is configured to pass those parameters through.

第七度阳光i 2024-12-10 12:45:49

如果您有一个带有方法 __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 call C.__str__(c) which sets t to zero as declared. str() itself only accepts one argument.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文