[Python.NET] Subclassing CLR types
Brian Lloyd
brian at zope.com
Thu Oct 30 19:55:02 EST 2003
> Hi,
> subclassing CLR types does work as long as you hold a reference to the
> instance of the subclass in Python. But when you pass a subclassed
> object to a CLR object and retrieve this object later through a method
> of the CLR object you don't get an instance of the subclass but an
> instance of the CLR base class the subclass was derived from:
>
> <snip good stuff>
>
> This will not work if you receive some kind of CLR object which was
> created internally by some CLR method and not through a wrapper. But you
> will get all object you created through the wrappers back as instances
> of the correct type.
>
> If I'm galloping in the wrong direction please give me a short stop
> signal. If not ... lets figure out the probably missing details.
>
> Michael
Hi Michael -
The implementation already does most of what you outlined internally
using GCHandles - the part that's missing is the lookup to recognize
a previously wrapped instance. I think that will be straightforward
to add.
I'll turn your test case into a unit test and try to make sure b2
solves it.
oooo - right before I sent this, I had a thought that I should
probably bounce off of the list to see if anyone can see any holes
in it.
Right now, the subclassing is "shallow" in that you get a subclass
in Python, but on the managed side the object is of whatever class
you based from.
I'd like for Python classes to be able to implement abstract .NET
classes & interfaces at some point, and the way I was planning to
do that is to generate a real managed subclass whenever you subclass
a managed class. That will allow for Python implementation of virtuals,
etc., but it also has the nice side effect that the internals can
always recognize things subclassed in Python w/o big nasty handle
mappings.
I can probably implement that basic 'real subclass per Python subclass'
as easily as the handle mapper, so that might be the way to solve
this (and take a step to better integration to boot).
Brian Lloyd brian at zope.com
V.P. Engineering 540.361.1716
Zope Corporation http://www.zope.com
More information about the PythonDotNet
mailing list