A simple mixin for create Value Objects
Project description
Based on Ruby Gem by NoFlopSquad (https://github.com/noflopsquad/value-object)
Installation
> pip install simple-value-object
Usage
Constructor and field readers
from simple_value_object import ValueObject
class Point(ValueObject):
def __init__(self, x, y):
pass
point = Point(1, 2)
point.x
# 1
point.y
# 2
point.x = 5
# CannotBeChangeException: You cannot change values from a Value Object, create a new one
class Date(ValueObject):
def __init__(self, day, month, year):
pass
date = Date(1, 10, 2015)
date.day
# 1
date.month
# 10
date.year
# 2015
date.month = 5
# CannotBeChangeException: You cannot change values from a Value Object, create a new one
Equality based on field values
from simple_value_object import ValueObject
class Point(ValueObject):
def __init__(self, x, y):
pass
a_point = Point(5, 3)
same_point = Point(5, 3)
a_point == same_point
# True
a_different_point = Point(6, 3)
a_point == a_different_point
# False
Hash code based on field values
from simple_value_object import ValueObject
class Point(ValueObject):
def __init__(self, x, y):
pass
a_point = Point(5, 3)
same_point = Point(5, 3)
a_point.hash == same_point.hash
# True
a_different_point = Point.new(6, 3)
a_point.hash == a_different_point.hash
# False
Invariants
from simple_value_object import ValueObject, invariant
class Point(ValueObject):
def __init__(self, x, y):
pass
@invariant
def inside_first_quadrant(cls, instance):
return instance.x > 0 and instance.y > 0
@invariant
def x_less_than_y(cls, instance):
return instance.x < instance.y
Point(-5, 3)
#ViolatedInvariantException: Args values [-5, 3] violates invariant: inside_first_cuadrant
Point(6, 3)
#ViolatedInvariantException: Args values [6, 3] violates invariant: x_less_than_y
Point(1,3)
#<__main__.Point at 0x7f2bd043c780>
Test
> pip install -r requirements-test.txt
> PYTHONPATH=$PYTHONPATH:. mamba
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Close
Hashes for simple-value-object-0.2.4.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49e1eb458431172e8b8abbd8c06ff3846eaff36160671c13f51d1d8555e4778c |
|
MD5 | d8f0187537b639039a01ecc15715644e |
|
BLAKE2b-256 | b128f3032904f2e83b0fa69593246ed2a75c18d546ec78bae695edb4b87e44e6 |