Python str.join与我的类型

Python str.join与我的类型,python,string,inheritance,overriding,Python,String,Inheritance,Overriding,是否有机会通过以下方式加入我的类型: 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__(

是否有机会通过以下方式加入我的类型:

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'
我总是这样做:

','.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是严格类型化的,这将在运行时消除一些愚蠢的错误。因此,不要试图将
切片
a
str
,而是将
映射到
str

如果您真的想成为黑客,请执行以下操作:

class Slice(str):
    def __init__(self, start, end):
        self.__start = start
        self.__end = end
        str.__init__('{0}:{1}'.format(self.__start, self.__end))
当我在构造函数中调用
str.\uuu init\uuu(self,'test')
时,我一直得到一个错误“TypeError:str()最多接受1个参数(2个给定)”,我认为这通常是正确的方法,所以这是一个好的迹象,表明您不应该子类化
str
。但是请继续。射中你自己的脚。这很痛苦,但按照传统的每天学点新东西的方式:)

什么都没有

','.join(str(x) for x in (Slice(1, 2), Slice(3, 4)))

只是为了见鬼,我决定不使用任何迭代函数来调用str(x)。这就是我的解决方案

x=(Slice(1, 2), Slice(3, 4))
','.join(['%s']*len(x)) % x

这是
str.join()
,而不是
string.join()
。thanx,答案很明显,我怎么猜不到自己(=我感觉我刚醒过来。谢谢。这就是为什么Guido想摆脱
地图和朋友…
str
是不可变的,所以即使在
\uuuuuu初始化\uuuuuu
中,你也不能更改它。你可能想覆盖
\uu新的\uuuuuuuu
(在这种情况下,这仍然是个坏主意。)啊,@PetrViktorin谢谢,我总是忘记这个。通常,我倾向于远离神秘的东西,因为如果我记不住它们,我怎么能指望下一个人记住呢?这是我在1999年背了《骆驼》一书后学到的,我相信所有的诡计都会让我成为一个超级黑客。Perl要么让你成为最简单的Python p很可能或者会让你更接近黑暗面;)