Type subclassing: bug or feature
Bjorn Pettersen
BPettersen at NAREX.com
Thu Jun 13 17:06:01 EDT 2002
> From: Aahz [mailto:aahz at pythoncraft.com]
>
> Consider the following code:
>
> class MyStr(str):
> def contains(self, value):
> return self.find(value) >= 0
>
> s = MyStr("hello, world!")
> s = s.capitalize()
> if s.contains('Hello'):
> print "Found it!"
>
> It fails with an AttributeError when it calls s.contains(), because
> s.capitalize() returned a str instead of a MyStr. Anyone
> want to take a whack at defending this as the correct behavior?
Well, in e.g. C++ this would make perfect sense, since a base class
method can't know the real type of self/this. In Python we can do better
of course:
>>> class A:
... def foo(self):
... return self.__class__()
...
>>> class B(A):
... pass
...
>>> b = B()
>>> b.foo()
<__main__.B instance at 0x00864CC0>
which version is correct is mostly a religious question, but personally
I think that if we _can_ do better than C++ we should <wink>.
File a bug and see what Guido says...
-- bjorn
More information about the Python-list
mailing list