[Python-Dev] flextype.c -- extended type system
Guido van Rossum
guido@python.org
Sun, 15 Sep 2002 15:43:38 -0400
> [Christian Tismer]
>
> <snip>
> > For your own, non-magic methods, there was not support, yet.
> > Sure, you could override your methods, but you needed
> > extra machinery to keep track of the methods, to find out
> > which to call when, and so on.
> > The proper way to store extra info about methods is to
> > put this info into the type object itself. This was not
> > possible before my patch. You could help yourself my
> > extending some of the existing method tables, but this
> > is hackish.
[Brett Cannon]
> That sounds great. Anything to make coding C extensions easier.
Brett, may I politely suggest that you try writing C extensions first
before claiming it needs to be made easier?
Christian's additions (as far as I understand them :-) are mostly
intended for very esoteric situations.
> > I didn't care of the magic slots at all. I think they don't need
> > to be changed, but I will have a look at it.
> <snip>
>
> Part of the reason I asked about the magic slots is that I
> personally think it would be great if you didn't have to use the
> specific struct slots for magic slots but instead were called based
> on their name in Python. That way you would not have to view
> Include/object.h every time you wanted to use one of the magic
> methods; you could just add it just like any other method and just
> give it a Python name that matched its magic method name. The
> obvious drawback is you would lose compiler checking that the
> arguments were correct for the method. But wouldn't this simplify
> keeping binary-compatibility if it was used since the struct would
> be pruned down significantly?
Alas, it would cause a major slowdown if this was the only way to
provide heavily-used operations like __add__ and __getitem__. Most of
the machinery to allow this probably already exists, but I wouldn't
recommend using it. Also, you'd have to provide two implementations
for binary operators, e.g. __add__ and __radd__.
> I don't know how much of a stumbling block this all is for newbies,
> but I know when I looked at extending sre's pattern objects to add a
> __contains__ method it took me a little while to find where the slot
> was and what all the macros were for. But that might also be
> because I didn't read the C extension docs and just dove in. =)
You could've picked a simpler extension to try to modify. :-)
--Guido van Rossum (home page: http://www.python.org/~guido/)