Skip to main content

Simple decorator implementation of an interface.

Project description

Interfaces
==========

Overview
--------

This library is a trivial implementation of an interface in Python,
with the following aspects / features:

* It fails at import time, not at construction, so you know
immediately when you have a problem.
* It's quite simple (very few LOC) and lenient where it counts
* It exclusively uses decorators, so...
* It does not require inheritance (reducing 'forced' subclassing)
* It does not enforce any typing checks
* It is intended to 'enhance' duck typing by avoiding common
pitfalls (forgot to implement something on your fake duck class,
overwrote something fundamental, etc.)

Usage
-----

Given a simple interface like:

```python
@interfaces.define
class DuckInterface(object):

@interfaces.require
def quack(self):
"""All Ducks must implement a 'quack' method."""
pass
```

...the following will raise a MissingRequiredAttribute exception
at import time:

```python
@interfaces.define(object)
class Silent(object):
# no quack method
pass
```

This, however works:

```python
@interfaces.implement(DuckInterface)
class Tree(object):

@interfaces.final
def quack(self):
return "the tree appears to quack."

tree = Tree()
tree.quack()
```

Additionally, if you are interested in using the `final` method decorator
outside of an interface, you can do so using the `strict` class decorator
around any class you want to check:

```python
@interfaces.strict
class BaseClass(object):

@interfaces.final
class method(self):
return "Old functionality!"

# the following will raise an exception at import:

@interfaces.strict
class SubClass(object):

class method(self):
return "New functionality!"
```

Limitations
-----------

Obviously, this does nothing for enforcing interfaces on the calling side.
I've contemplated something like:

```python
def get_json(instance):
# raises an exception if instance does not implement
# JSONViewInterface
interfaces.expects(instance, JSONViewInterface)
return instance.to_json()
```

...but that may be too close to type checking, and the only thing you gain
is a more explicit exception at
runtime. Feedback welcome.


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

interfaces-0.0.2.tar.gz (3.3 kB view details)

Uploaded Source

File details

Details for the file interfaces-0.0.2.tar.gz.

File metadata

  • Download URL: interfaces-0.0.2.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for interfaces-0.0.2.tar.gz
Algorithm Hash digest
SHA256 ba6cef161fac11870e87662f9386cb075e52fbef30532ea50e32dc4f11af2823
MD5 34b82aef611f14caa7a955f062c217b0
BLAKE2b-256 3e8722232606bab94cd4248a9eeb10773c50e6409d2e7ed398f5cb970ba4c2d5

See more details on using hashes here.

Supported by

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