manatlan <[EMAIL PROTECTED]> wrote:
   ...
> > def addaclass(aninst, onemoreclass):
> >     aninst.__class__ = type(aninst.__aclass__.__name__,
> >             (aninst.__aclass__, onemoreclass), {})
   ...
> b=gtk.Button("the_label")
> addaclass(b,MoreMethods)
   ...
> "TypeError: __class__ assignment: only for heap types"
> on the last line ...

Ah, yes, a type can be coded in such a way that you simply can't
reassign the __class__ of its instances, and apparently gtk.Button is
coded that way.

If you're keen on __class__ reassigning, you'll have to wrap such
classes before instance creation time, e.g.:

class weirdGtkButton(gtk.Button): pass

and use

b = weirdGtkButton("the label")

to generate the instances.  That, of course, assumes that gtk.Button
isn't ALSO coded in ways that impede subclassing (as for all I know it
might be -- I don't have GTK around to check), in which case instead of
subclassing it you need a trickier wrap-and-hold approach (and you can
never pass isinstance checks, which subclassing would let you pass).


Alex
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to