Info: | DDD Value Object implementation. |
---|---|
Author: | Paweł Zadrożny @pawelzny <pawel.zny@gmail.com> |
- Value Objects are immutable.
- Two objects with the same values are considered equal
- Access to values with dot notation:
value.my_attr
- Access to values by key:
value['my_attr']
pipenv install vo # or pip install vo
Package: https://pypi.org/project/vo/
- Full documentation: http://vo.readthedocs.io
- Public API: http://vo.readthedocs.io/en/latest/api.html
- Examples and usage ideas: http://vo.readthedocs.io/en/latest/examples.html
Value accept any key=value
pairs. These pairs will be attached to object as attributes.
Once created values are immutable. Attributes can't be changed or deleted.
>>> from vo import Value
>>> book = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> book
Value(authors=['Mark Lutz', 'David Ascher'], publisher="O'REILLY", title='Learning Python')
>>> str(book)
'{"authors": ["Mark Lutz", "David Ascher"], "publisher": "O\'REILLY", "title": "Learning Python"}'
Warning
Any attempt of value modification or delete will raise ImmutableInstanceError
>>> from vo import Value
>>> book = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> book.title = 'Spam'
Traceback (most recent call last):
File "<input>", line 1, in <module>
raise ImmutableInstanceError()
vo.value.ImmutableInstanceError: Modification of Value frozen instance is forbidden.
Values can be accessed like object attributes or like dict keys.
>>> from vo import Value
>>> book = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> book.title == book['title']
True
>>> book.authors == book['authors']
True
Let's take the same book example.
>>> from vo import Value
>>> book1 = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> book2 = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> book1 == book2
True
>>> book1 is book2
False
Check if value exists.
>>> from vo import Value
>>> book = Value(title='Learning Python',
... authors=['Mark Lutz', 'David Ascher'],
... publisher="O'REILLY")
>>> 'title' in book
True
>>> 'price' in book
False
>>> book.title
'Learning Python'
>>> book.price
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'Value' object has no attribute 'price'