delegate (version 0.1)
index
/home/dickrp/svn/support/python/delegate/delegate.py

Class to automate delegation decisions based on inheritance graph.
 
Copyright 2004, Robert Dick (dickrp@eecs.umich.edu).
 
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
enough.
 
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)):
    def __init__(*args):
      type(Delegate).__init__(*args)
      type(qt.QObject).__init__(*args)
 
  class MyClass(Delegate, qt.QObject):
    __metaclass__ = sip_meta_join
    ...
 
Please see the license file for legal information.

 
Classes
       
__builtin__.object
Delegate

 
class Delegate(__builtin__.object)
    Inherit from Delegate to get delegation variables on class construction.
 
  Data descriptors defined here:
__dict__
dictionary for instance variables (if defined)
__weakref__
list of weak references to the object (if defined)

Data and other attributes defined here:
__metaclass__ = <class 'delegate._delegate_meta'>
Sets up delegation private variables.
 
Traverses inheritance graph on class construction.  Creates a private
__base variable for each base class.  If delegating to the base class is
inappropriate, uses _no_delegation class.

 
Functions
       
should_call(obj, pos, supr)
Returns bool.  Should 'self' delegate to 'super' at 'pos'?
 
Determines whether pos is left-most derived of super in MRO.

 
Data
        __author__ = 'Robert Dick'
__author_email__ = 'dickrp@eecs.umich.edu'
__version__ = '0.1'

 
Author
        Robert Dick