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是严格类型化的,这将在运行时消除一些愚蠢的错误。因此,不要试图将切片
astr
,而是将映射到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很可能或者会让你更接近黑暗面;)