ddd值对象实现
vo的Python项目详细描述
Info: | DDD Value Object implementation. |
---|---|
Author: | Paweł Zadrożny @pawelzny <pawel.zny@gmail.com> |
功能
- 值对象是不可变的。
- 具有相同值的两个对象被视为相等
- 使用点符号访问值:value.my_attr
- 按键访问值:value['my_attr']
文档
快速示例
值接受任何key=value对。这些对将作为属性附加到对象。 一旦创建的值是不可变的。无法更改或删除属性。
>>>fromvoimportValue>>>book=Value(title='Learning Python',...authors=['Mark Lutz','David Ascher'],...publisher="O'REILLY")>>>bookValue(authors=['Mark Lutz','David Ascher'],publisher="O'REILLY",title='Learning Python')>>>str(book)'{"authors": ["Mark Lutz", "David Ascher"], "publisher": "O\'REILLY", "title": "Learning Python"}'
警告
任何修改或删除值的尝试都将引发ImmutableInstanceError
>>>fromvoimportValue>>>book=Value(title='Learning Python',...authors=['Mark Lutz','David Ascher'],...publisher="O'REILLY")>>>book.title='Spam'Traceback(mostrecentcalllast):File"<input>",line1,in<module>raiseImmutableInstanceError()vo.value.ImmutableInstanceError:ModificationofValuefrozeninstanceisforbidden.
访问值
可以像对象属性或dict键一样访问值。
>>>fromvoimportValue>>>book=Value(title='Learning Python',...authors=['Mark Lutz','David Ascher'],...publisher="O'REILLY")>>>book.title==book['title']True>>>book.authors==book['authors']True
对象比较
让我们以同一本书为例。
>>>fromvoimportValue>>>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==book2True>>>book1isbook2False
值查找
检查值是否存在。
>>>fromvoimportValue>>>book=Value(title='Learning Python',...authors=['Mark Lutz','David Ascher'],...publisher="O'REILLY")>>>'title'inbookTrue>>>'price'inbookFalse>>>book.title'Learning Python'>>>book.priceTraceback(mostrecentcalllast):File"<input>",line1,in<module>AttributeError:'Value'objecthasnoattribute'price'