Skip to main content

behaviour based duck typing library

Project description

Rationale

Allows working with objects depending on their current behaviour, not their type or their registered (ABC-like) interface.

Quick example:

from ducktypes.ducktype import Duck

class MyObject(object):
    def some_method(self, a, b):
        pass
    def another_method(self, x):
        pass


class AnotherObject(object):
    def some_method(self, a, b):
        pass
    def another_method(self, a):
        pass

class AnotherDifferentObject(object):
    def some_method(self, a, b, c):
        pass
    def another_method(self, a):
        pass

duck = Duck(MyObject())

print "AnotherObject instances implement MyObject interface: ", duck.maybe_implemented_by(AnotherObject())
print "AnotherDifferentObject instances implement MyObject interface:", duck.maybe_implemented_by(AnotherDifferentObject())

Output:

AnotherObject instances implement MyObject interface:  True
AnotherDifferentObject instances implement MyObject interface: False

Gotchas

  • positional arguments are supposed to be called as positional arguments, and keyword arguments are supposed to be called as positional arguments. If your client code calls keyword arguments as positional ones, signature matching may fail.

  • proxy-everything methods, i.e. (*args, **kwargs)-like signature, will of course deceive our signature detection system.

Todo

  • __getattr__ / __getattribute__ overriding functions

  • subclasses exposing special methods with different signature

  • C-declared functions that don’t expose their signature.

  • implement optional strict checking.

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

ducktypes-0.2.5.zip (16.4 kB view details)

Uploaded Source

File details

Details for the file ducktypes-0.2.5.zip.

File metadata

  • Download URL: ducktypes-0.2.5.zip
  • Upload date:
  • Size: 16.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ducktypes-0.2.5.zip
Algorithm Hash digest
SHA256 a07ea1849da4328c4e18c2f4bf6c89334dd1eb0d563963d057522da675a9a33b
MD5 202a9f40b231d019b3ea6d66b5e80f49
BLAKE2b-256 ae3567a8271be75e0171376cc674ead3b08953292fb7f8f6df21259c201ae415

See more details on using hashes here.

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