是否有机会使用以下方式加入我的类型:
str.join()
我有我的班级:
class Slice(object):
def __init__(self, start, end):
self.__start = start
self.__end = end
def __str__(self):
return '{0}:{1}'.format(self.__start, self.__end)
def __repr__(self):
return "'{}'".format(str(self))
我应该覆盖什么来执行这种代码:
','.join(Slice(1, 2), Slice(3, 4))
得到这样的结果:
'1:2,3:4'
答案 0 :(得分:7)
没有
','.join(str(x) for x in (Slice(1, 2), Slice(3, 4)))
答案 1 :(得分:0)
我总是这样做:
','.join(map(str, (Slice(1, 2), Slice(3, 4)))
但你也可以创建一个效用函数:
def strseq(*args):
for arg in args:
yield str(arg)
','.join(strseq(Slice(1, 2), Slice(3, 4)))
我认为这是故意的,通常是一件好事:Python是严格打字的,会在运行时抖掉一些愚蠢的错误。因此,请勿尝试将Slice
设为str
,而应将map
改为str
。
如果你真的想要发黑,请执行以下操作:
class Slice(str):
def __init__(self, start, end):
self.__start = start
self.__end = end
str.__init__('{0}:{1}'.format(self.__start, self.__end))
我一直收到错误“TypeError:str()最多需要1个参数(2个给定)”当我在构造函数中调用str.__init__(self, 'test')
时,这通常是正确的方法,我认为,所以这是一个好兆头,你不应该是str
的子类。但是继续吧。用脚射击自己。这很伤人,但是以一种老式的学习方式 - 一天一新的方式:)
答案 2 :(得分:0)
只是为了它,我决定不使用任何迭代函数来调用str(x)。所以这是我的解决方案
x=(Slice(1, 2), Slice(3, 4))
','.join(['%s']*len(x)) % x