characteristic: Say ‘yes’ to types but ‘no’ to typing!

Release v0.1.0 (What’s new?).

characteristic is an MIT-licensed Python package with class decorators that ease the chores of implementing the most common attribute-related object protocols.

You just specify the attributes to work with and characteristic gives you:

  • a nice human-readable __repr__,
  • a complete set of comparison methods,
  • and a kwargs-based initializer (that cooperates with your existing one)

without writing dull boilerplate code again and again.

So put down that type-less data structures and welcome some class into your life!

characteristic’s documentation lives at Read the Docs, the code on GitHub. It’s rigorously tested on Python 2.6, 2.7, 3.3+, and PyPy.


>>> from characteristic import attributes
>>> @attributes(["a", "b"])
... class AClass(object):
...     pass
>>> @attributes(["a", "b"], defaults={"b": "abc"})
... class AnotherClass(object):
...     pass
>>> obj1 = AClass(a=1, b="abc")
>>> obj2 = AnotherClass(a=1, b="abc")
>>> obj3 = AnotherClass(a=1)
>>> print obj1, obj2, obj3
<AClass(a=1, b='abc')> <AnotherClass(a=1, b='abc')> <AnotherClass(a=1, b='abc')>
>>> obj1 == obj2
>>> obj2 == obj3

Indices and tables