Skip to main content

Class to automate delegation decisions based on inheritance graph.

Project description

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.

Project details


Release history Release notifications | RSS feed

This version

0.1

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page