41 lines
1.1 KiB
ReStructuredText
41 lines
1.1 KiB
ReStructuredText
![]() |
.. _examples:
|
|||
|
|
|||
|
Examples
|
|||
|
========
|
|||
|
|
|||
|
|
|||
|
:func:`@attributes <characteristic.attributes>` together with the definition of the attributes using class attributes enhances your class by:
|
|||
|
|
|||
|
- a nice ``__repr__``,
|
|||
|
- comparison methods that compare instances as if they were tuples of their attributes,
|
|||
|
- and – optionally but by default – an initializer that uses the keyword arguments to initialize the specified attributes before running the class’ own initializer (you just write the validator!).
|
|||
|
|
|||
|
|
|||
|
.. doctest::
|
|||
|
|
|||
|
>>> from characteristic import Attribute, attributes
|
|||
|
>>> @attributes
|
|||
|
... class C(object):
|
|||
|
... a = Attribute()
|
|||
|
... b = Attribute()
|
|||
|
>>> obj1 = C(a=1, b="abc")
|
|||
|
>>> obj1
|
|||
|
<C(a=1, b='abc')>
|
|||
|
>>> obj2 = C(a=2, b="abc")
|
|||
|
>>> obj1 == obj2
|
|||
|
False
|
|||
|
>>> obj1 < obj2
|
|||
|
True
|
|||
|
>>> obj3 = C(a=1, b="bca")
|
|||
|
>>> obj3 > obj1
|
|||
|
True
|
|||
|
>>> @attributes
|
|||
|
... class CWithDefaults(object):
|
|||
|
... a = Attribute()
|
|||
|
... b = Attribute()
|
|||
|
... c = Attribute(default=3)
|
|||
|
>>> obj4 = CWithDefaults(a=1, b=2)
|
|||
|
>>> obj5 = CWithDefaults(a=1, b=2, c=3)
|
|||
|
>>> obj4 == obj5
|
|||
|
True
|