[Python-Dev] subclassing builtin data structures (original) (raw)

Steven D'Aprano steve at pearwood.info
Fri Feb 13 03:57:30 CET 2015


On Thu, Feb 12, 2015 at 06:14:22PM -0800, Ethan Furman wrote:

On 02/12/2015 05:46 PM, MRAB wrote: > On 2015-02-13 00:55, Guido van Rossum wrote:

>> Actually, the problem is that the base class (e.g. int) doesn't know how >> to construct an instance of the subclass -- there is no reason (in >> general) why the signature of a subclass constructor should match the >> base class constructor, and it often doesn't. >> >> So this is pretty much a no-go. It's not unique to Python -- it's a >> basic issue with OO. >> > Really?

What I was asking about, and Guido responded to, was not having to specifically override add, mul, sub, and all the others; if we do override them then there is no problem.

I think you have misunderstood MRAB's comment. My interpretation is that MRAB is suggesting that methods in the base classes should use type(self) rather than hard-coding their own type.

E.g. if int were written in pure Python, it might look something like this:

class int(object): def new(cls, arg): ...

def __add__(self, other):
    return int(self, other)

(figuratively, rather than literally). But if it looked like this:

def __add__(self, other):
    return type(self)(self, other)

then sub-classing would "just work" without the sub-class having to override each and every method.

-- Steve



More information about the Python-Dev mailing list