Tool for automated implementation of delegation pattern with ABC
Project description
abc-delegation
A tool for automated delegation with abstract base classes.
This metaclass enables creation of delegating classes inheriting from an abstract base class.
This technique is impossible with regular __getattr__
approach for delegation,
so normally, you would have to define every delegated method explicitly.
Not any more
Basic usage:
from abc import ABCMeta
from abc_delegation import delegation_metaclass
class A(metaclass=ABCMeta):
@abstractmethod
def bar(self):
pass
@abstractmethod
def foo(self):
pass
class B:
def bar(self):
return "B bar"
def foo(self):
return "B foo"
class C(A, metaclass=delegation_metaclass("my_delegate")):
def __init__(self, b):
self.my_delegate = b
def foo(self):
return "C foo"
c = C(B())
assert c.foo() == "C foo"
assert c.bar() == "B bar"
Multiple delegates:
from abc import ABCMeta
from abc_delegation import multi_delegation_metaclass
class A(metaclass=ABCMeta):
@abstractmethod
def bar(self):
pass
@abstractmethod
def foo(self):
pass
@abstractmethod
def baz(self):
pass
class B:
def bar(self):
return "B bar"
def foo(self):
return "B foo"
class X:
def baz(self):
return "X baz"
class C(A, metaclass=multi_delegation_metaclass("_delegate1", "_delegate2")):
def __init__(self, d1, d2):
self._delegate1 = d1
self._delegate2 = d2
def foo(self):
return "C foo"
c = C(B(), X())
assert c.bar() == "B bar"
assert c.foo() == "C foo"
assert c.baz() == "X baz"
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
No source distribution files available for this release.See tutorial on generating distribution archives.
Built Distribution
Close
Hashes for abc_delegation-0.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 6ce692eabf8aee570b9481d5ec69c4022d2cbb93d93d2b529db77b7577a8ea0e |
|
MD5 | ebb82474f3d3e8c01b7fcdd3049a8a25 |
|
BLAKE2b-256 | d3767c6fda62668171c49af46a750814ce01d93dcf25dfe0dfa6b1b7aab6aa4f |