[Python-ideas] "Immutable Builder" Pattern and Operator

Wes Turner wes.turner at gmail.com
Sun Jan 22 23:09:34 EST 2017


On Sunday, January 22, 2017, Soni L. <fakedme+py at gmail.com> wrote:

>
>
> On 22/01/17 10:03 PM, Wes Turner wrote:
>
>
>
> On Sunday, January 22, 2017, Wes Turner <wes.turner at gmail.com
> <javascript:_e(%7B%7D,'cvml','wes.turner at gmail.com');>> wrote:
>
>> Have you looked at pyrsistent for immutable/functional/persistent/copy-on-write
>> data structures in Python?
>>
>> https://github.com/tobgu/pyrsistent/
>>
>> (freeze() / thaw())
>>
>> ... e.g. List and Dict NamedTuple values are not immutable (because
>> append() and update() still work)
>>
>
> fn.py also has immutables:
> https://github.com/kachayev/fn.py/blob/master/README.rst#
> persistent-data-structures
>
>
> You seem to be thinking of "immutable object builder". Not "the builder
> itself is immutable and operations on it create new builders".
>

My mistake.
Something like @optionable and/or @curried from fn.py in conjunction with
PClass from pyrsistent may accomplish what you describe?


>
>
>
>
>>
>> On Sunday, January 22, 2017, Soni L. <fakedme+py at gmail.com> wrote:
>>
>>> I've been thinking of an Immutable Builder pattern and an operator to go
>>> with it. Since the builder would be immutable, this wouldn't work:
>>>
>>> long_name = mkbuilder()
>>> long_name.seta(a)
>>> long_name.setb(b)
>>> y = long_name.build()
>>>
>>> Instead, you'd need something more like this:
>>>
>>> long_name = mkbuilder()
>>> long_name = long_name.seta(a)
>>> long_name = long_name.setb(b)
>>> y = long_name.build()
>>>
>>> Or we could add an operator to simplify it:
>>>
>>> long_name = mkbuilder()
>>> long_name .= seta(a)
>>> long_name .= setb(b)
>>> y = long_name.build()
>>>
>>> (Yes, I'm aware you can x = mkbuilder().seta(a).setb(b), then y =
>>> x.build(). But that doesn't work if you wanna "fork" the builder. Some
>>> builders, like a builder for network connections of some sort, would work
>>> best if they were immutable/forkable.)
>>> _______________________________________________
>>> Python-ideas mailing list
>>> Python-ideas at python.org
>>> https://mail.python.org/mailman/listinfo/python-ideas
>>> Code of Conduct: http://python.org/psf/codeofconduct/
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170122/73792a9d/attachment-0001.html>


More information about the Python-ideas mailing list