加入

时间:2016-03-05 01:14:47

标签: python operator-overloading

我有一个类,如果在字符串的上下文中使用,则实例应以字符串形式呈现。确切地说,应该返回指向字符串的属性。

该类看起来如下并且到目前为止起作用:

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)

不幸的是,当我尝试这样的事情时,我得到了一个TypeError:

>>> "-".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(["test", "test"])
'test-test'
>>> 

我很确定我只是错过了正确的运算符重载功能。 有人可以用列表中的类实例来实现这个目的吗?

感谢。

1 个答案:

答案 0 :(得分:2)

join要求元素为字符串,如下所示: https://docs.python.org/3/library/stdtypes.html#str.join

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

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