[Tutor] Poorly understood error involving class inheritance
David Perlman
dperlman at wisc.edu
Thu Sep 10 22:51:02 CEST 2009
Well, here's what I am really doing:
class oneStim(str):
def __init__(self, time, mods=[], dur=None, format='%1.2f'):
self.time=time
self.mods=mods
self.dur=dur
self.format=format
def __cmp__(self,other):
return cmp(self.time,other.time)
def __repr__(self):
timestr=self.format % self.time
if self.mods == []:
modstr=''
else:
modstr = '*' + ','.join(self.format % i for i in self.mods)
if self.dur == None:
durstr = ''
else:
durstr = ':' + (self.format % self.dur)
return timestr + modstr + durstr
def __len__(self):
return len(self.__repr__())
The purpose of this is to make an object that holds a collection of
numbers and represents them as a specifically formatted string. I
want to be able to do something like:
>>> z=oneStim(22.5678)
>>> z.dur=10
>>> z
22.57:10.00
>>> len(z)
11
>>> z.rjust(20)
' 22.5678'
Note that that doesn't work either. It works fine like this, though:
>>> z
22.57:10.00
>>> str(z).rjust(20)
' 22.57:10.00'
I can work with that just fine, but I am curious to understand what's
going on under the hood that makes it fail when subclassed from str...
On Sep 10, 2009, at 3:42 PM, Serdar Tumgoren wrote:
>>>>> class dummy2(str):
>> ... def __init__(self,dur=0):
>> ... self.dur=dur
>> ...
>>>>> z=dummy2(3)
>>>>> z.dur
>> 3
>>
>> So far so good. But:
>>
>>>>> z=dummy2(dur=3)
>> Traceback (most recent call last):
>> File "<stdin>", line 1, in <module>
>> TypeError: 'dur' is an invalid keyword argument for this function
>>>>>
>
> I think you're problem may stem from the fact that you subclassed the
> string type and then tried to pass in an integer.
>
>>>> class Dummy2(int):
> ... def __init__(self, dur=0):
> ... self.dur = dur
> ...
>>>> z = Dummy2(3)
>>>> z.dur
> 3
>
> When you sub "int" for "str", it seems to work. Is there a reason
> you're not just subclassing "object"? I believe doing so would give
> you the best of both worlds.
--
-dave----------------------------------------------------------------
"Pseudo-colored pictures of a person's brain lighting up are
undoubtedly more persuasive than a pattern of squiggles produced by a
polygraph. That could be a big problem if the goal is to get to the
truth." -Dr. Steven Hyman, Harvard
More information about the Tutor
mailing list