Custom string joining
Martineau
ggrp2.20.martineau at dfgh.net
Mon May 9 17:38:24 EDT 2011
On May 9, 1:25 pm, Claudiu Popa <cp... at bitdefender.com> wrote:
> Hello Karim,
>
> > You just have to implement __str__() python special method for your
> > "custom_objects".
> > Regards
> > Karim
> >> Cheers,
> >> Chris
> >> --
> >>http://rebertia.com
>
> I already told in the first post that I've implemented __str__ function, but it doesn't
> seems to be automatically called.
> For instance, the following example won't work:
>
> >>> class a:
>
> def __init__(self, i):
> self.i = i
> def __str__(self):
> return "magic_function_{}".format(self.i)>>> t = a(0)
> >>> str(t)
> 'magic_function_0'
> >>> "".join([t])
>
> Traceback (most recent call last):
> File "<pyshell#13>", line 1, in <module>
> "".join([t])
> TypeError: sequence item 0: expected str instance, a found
>
> --
> Best regards,
> Claudiu
The built-in str join() method just doesn't do the conversion to
string automatically -- instead it assume it has been given a sequence
of string. You can achieve the effect you want by modifying the
optimized version of my earlier post that @Ian Kelly submitted.
def join(seq, sep):
it = iter(seq)
sep = str(sep)
try:
first = it.next()
except StopIteration:
return []
def add_sep(r, v):
r += [sep, str(v)]
return r
return ''.join(reduce(add_sep, it, [str(first)]))
class A:
def __init__(self, i):
self.i = i
def __str__(self):
return "magic_function_{}".format(self.i)
lst = [A(0),A(1),A('b'),A(3)]
print repr( join(lst, '|') )
Output:
'magic_function_0|magic_function_1|magic_function_b|magic_function_3'
More information about the Python-list
mailing list