用于联接的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")]))