[Zope-dev] Extending a class' __bases__ at runtime

Morten W. Petersen morten@thingamy.net
Sun, 19 Aug 2001 18:04:07 +0200 (CEST)


Hia,

trying to modify a class at runtime in Zope is proving hard to do.  The
first interactive session is a 'Zope debugging session':

Python 1.5.2 (#0, Apr 10 2001, 10:03:44)  [GCC 2.95.3 20010219
(prerelease)]
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
Welcome to <secure_monitor_channel connected 127.0.0.1:46914 at 90a7df8>
>>> import Zope
>>> a=Zope.app()
>>> s=a['Secret']
>>> class a1:pass
>>> class a2:pass
>>> class a3:pass
>>> s.__class__.__bases__ = s.__class__.__bases__ + (a1,a2,a3)
>>> s.__class__.__bases__
(<extension class App.PersistentExtra.Persistent at 4022be80>, <extension
class Products.BTreeFolder.BTreeFolder.BTreeFolder at 84fecf8>, <extension
class Acquisition.Acquirer at 4024ac80>, <extension class
AccessControl.Role.RoleManager at 82819f0>, <class
Products.WarpFramework.product_base_item.product_base_item at 845e058>,
<extension class Products.WarpFramework.base_item.base_item at 848f1b0>,
<class Products.Secret.imports.imports at 8532fa0>, <class
Products.Secret.initializations.initializations at 858ee28>, <class
Products.Secret.trash_test.trash_test at 857e2d0>)
>>> 

where, as you can see, trying to change the base classes doesn't work,
while in an ordinary, 'plain python' interactive session, it works:

Python 1.5.2 (#0, Apr 10 2001, 10:03:44)  [GCC 2.95.3 20010219
(prerelease)] on linux2
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
>>> class a:
...     pass
... 
>>> b=a()
>>> class a1: pass
...     
>>> class a2: pass
... 
>>> class a3: pass
... 
>>> b.__class__.__bases__
()
>>> b.__class__.__bases__ = b.__class__.__bases__ + (a1,a2,a3)
>>> b.__class__.__bases__
(<class __main__.a1 at 8070db0>, <class __main__.a2 at 806ff80>, <class
__main__.a3 at 80709f8>)
>>> a.__bases__
(<class __main__.a1 at 8070db0>, <class __main__.a2 at 806ff80>, <class
__main__.a3 at 80709f8>)
>>> 

Any clues on what needs to be done to be able to modify a class' base
classes at runtime?

Thanks & cheers,

Morten