Class to automate delegation decisions based on inheritance graph.
Copyright 2004, Robert Dick (firstname.lastname@example.org).
Whenever you need to delegate to something, inherit from delegate and use
self.__<base>.<method()> to access the base. If the delegation was
inappropriate due to reconverging paths in the inheritance graph, the return
value will be None. In the case of reconverging paths, the left-most call in
the method resolution order will be honored. The rest will be nulified. You
can also check to see if the base is the no_delegation object. Delegate to all
your bases if you need everything in the inheritance graph to be visited. As
long as one of a class's (transitive) bases inherits from Delegate, that's
For examples of use, please see the delegate.py file.
Python doesn't yet automate meta-class instantiation. If you need to inherit
from Delegate and another class that does not have a 'type' metaclass, you'll
need to generate a shared derived metaclass and explicitly use that as your
class's metaclass. For example:
import Delegate, qt
class sip_meta_join(type(Delegate), type(qt.QObject)):
class MyClass(Delegate, qt.QObject):
__metaclass__ = sip_meta_join
Please see the license file for legal information.