如何结构连接()在对象列表中

2024-04-26 11:24:22 发布

您现在位置:Python中文网/ 问答频道 /正文

class A:
    def __init__(self, text):
        self.text = text

    def __repr__(self):
        return self.text

    def __str__(self):
        return self.text

    def __add__(self, other):
        return str(self) + other

    def __radd__(self, other):
        return other + str(self)

我希望A对象的列表与str.join()“可连接”。 我应该实现哪个special method来实现这个目标?在

当然,我可以先提取一个文本列表,然后将其加入其中,但这不是我想要的。在

^{pr2}$

Tags: 对象textselfadd列表returninitdef
1条回答
网友
1楼 · 发布于 2024-04-26 11:24:22

__str__仅在对象的用户希望将其转换为字符串时使用,而str.join则不使用。您必须显式地将对象转换为str值,然后str.join才会使用它们。在

是否可以定义str.join来隐式调用它作为参数接收的iterable中的每个元素str?当然。但事实并非如此。)

Python的一个原则是“显式优于隐式”。如果您想str.join连接对象的字符串表示,请将str对象传递给join。在

print(' '.join(str(x) for x in l))

join将它们隐式处理为str对象的唯一方法是如果它们是str对象,也就是说A是否是{}的子类。在

^{pr2}$

不过,要小心在没有保证的地方使用继承。在

相关问题 更多 >