Skip to main content

Small implementation of Roles

Project description

Pythonic implementation of the DCI (Data Context Interaction) pattern (

The difference with mixins is that this role is applied only to the subject instance, not to the subject class (alas, a new class is constructed).

Roles can be applied and revoked. Multiple roles can be applied to an instance. Revocation can happen in any particular order.

As a basic example, consider some domain class:

>>> from roles import RoleType
>>> class DomainClass(object):
...     def __init__(self, a=3):
...         self.a = a
>>> instance = DomainClass()

The instance should participate in a collaboration in which it fulfills a particular role:

>>> class MyRole(object):
...     __metaclass__ = RoleType
...     def rolefunc(self):
...          return self.a
>>> inrole = MyRole(instance)
>>> inrole       # doctest: +ELLIPSIS
<__main__.DomainClass+MyRole object at 0x...>
>>> isinstance(inrole, DomainClass)

Now the inrole instance can be invoked with the rolefunc() method as if it was the DomainClass’ one:

>>> inrole.rolefunc()

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

roles-0.1.0.tar.gz (4.4 kB view hashes)

Uploaded source

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor NVIDIA NVIDIA PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page