[PyQt] thoughts about dip interfaces and python abstract base classes
dsdale24 at gmail.com
Sun Mar 13 20:14:15 GMT 2011
On Sun, Mar 13, 2011 at 3:01 PM, Darren Dale <dsdale24 at gmail.com> wrote:
> I've been learning about python's abstract base classes at
> http://www.python.org/dev/peps/pep-3119/ and
> http://docs.python.org/py3k/library/abc.html . The PEP mentions that
> there is considerable overlap between ABCs and interfaces, and I'm
> rereading the dip documentation on interfaces now. If I understand
> correctly, dip's "implements" decorator is similar (perhaps based on)
> python's abstract base class "register" class method. Is it ever the
> case that dip classes actually subclass a dip interface, as python
> classes would subclass one or more abstract base class?
It also occurs to me that, if Interface were/is based on abstract base
classes with properties and methods decorated with @abstractmethod,
dip classes that actually subclass such an Interface would benefit
from python's built-in checks that prevent instantiation of an object
that has not overridden all the necessary methods declared in the
from dip.model import Interface, Str
# The URL to download from.
url = Str()
""" Download the file. """
class Download(Model, IDownload)
""" Download the file using urllib. """
Then if we have a class that needs to be adapted to IDownload:
def __init__(self, target_file):
# Save the URL for later.
self.target_file = target_file
# Download the file self.target_file
The "adapt" decorator could register the adapter class with the
appropriate Interfaces that it identifies in
from dip.model import adapt, Adapter, DelegatedTo
class FileDownloaderIDownloadAdapter(Adapter, IDownload):
""" This adapts FileDowloader to IDownload. """
url = DelegatedTo('adaptee.target_file')
""" Implement IDownload.download(). """
This way, Interfaces are more closely unified with python's abstract
base classes, one can be certain that a class deriving from an
interface has fully implemented it, while still benefiting from dip's
More information about the PyQt