new-style classes, mutable __bases__

Jp exarkun at meson.dyndns.org
Tue Aug 27 13:44:24 CEST 2002


These functions are part of a rebuild module to updating
code without restarting the program

def latestClass(oldClass):
     """Get the latest version of a class.
     """
     if oldClass is object:
         return oldClass
     module = __import__(oldClass.__module__, {}, {}, 'nothing')
     newClass = getattr(module, oldClass.__name__)
     newBases = []
     for base in newClass.__bases__:
         newBases.append(latestClass(base))
     newClass.__bases__ = tuple(newBases)
     return newClass

def updateInstance(self):
     """Updates an instance to be current
     """
     self.__class__ = latestClass(self.__class__)

class Foo(object):
   pass

updateInstance(Foo())

Traceback (most recent call last):
   File "<stdin>", line 1, in ?
   File "<stdin>", line 4, in updateInstance
   File "<stdin>", line 11, in latestClass
TypeError: readonly attribute

Old-style classes, this works great.  New-style, not so much.
Is there a workaround for this?  Is it permanent behavior?
Is there a better way to approach this problem?

Thanks,
   Jp




More information about the Python-list mailing list