用于联接的Python运算符重载

用于联接的Python运算符重载,python,operator-overloading,Python,Operator Overloading,我有一个类,如果在一个字符串的上下文中使用实例,则该类的实例应表示为字符串。准确地说,应该返回指向字符串的属性 该类的外观如下所示,目前为止仍然有效: class Test: string = "" def __init__(self, value=""): self.string = value def __repr__(self): return str(self.string) def __str__(self):

我有一个类,如果在一个字符串的上下文中使用实例,则该类的实例应表示为字符串。准确地说,应该返回指向字符串的属性

该类的外观如下所示,目前为止仍然有效:

class Test:
    string = ""

    def __init__(self, value=""):
        self.string = value

    def __repr__(self):
        return str(self.string)

    def __str__(self):
        return self.__repr__()

    def __add__(self, other):
        return "%s%s" % (self.string, other)

    def __radd__(self, other):
        return "%s%s" % (other, self.string)
不幸的是,当我尝试这样做时,我遇到了一个类型错误:

>>> "-".join([Test("test"), Test("test2")])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, instance found
我很确定我只是错过了正确的操作符重载功能。 有人知道如何通过列表中的类实例来实现这一点吗


谢谢。

join
要求元素为字符串,如下所述:

您需要将对象显式转换为字符串,例如:

"-".join(map(str, [Test("test"), Test("test2")]))

您的预期输出是否为“test-test2”?Python的
str.join()
不会隐式地将连接序列的元素转换为字符串。使用
map(str,seq)
将元素转换为字符串,然后加入其中。OP的另一个问题是:为什么将
string
定义为
Test
的类成员?你永远不会在你的代码中使用它。实例的定义(在
\uuuu init\uuuu
中完成)是否足够?当然,上面的代码只是为了演示我的问题而简化了。上面对字符串的定义当然是多余的。目标是在这个简化的测试场景中,真正以“test-test2”结束。我正在检查你的建议。谢谢。谢谢,这个解决方案按预期工作。我想我可以通过使用操作符重载来实现这一点。join方法将列表元素视为字符串,我认为它会隐式地调用。但是你的建议很管用。
"-".join(map(str, [Test("test"), Test("test2")]))