Я всегда просто делаю это:
','.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
a 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
.Но продолжай.Стреляй себе в ногу.Это больно, но в старом добром старомодном стиле «учись чему-то новому» :)