Le 01/03/2012 19:07, Guido van Rossum a écrit :
What other use cases are there?

frozendict could be used to implement "read-only" types: it is not possible to add or remove an attribute or set an attribute value, but attribute value can be a mutable object. Example of an enum with my type_final.patch (attached to issue #14162).

>>> class Color:
...   red=1
...   green=2
...   blue=3
...   __final__=True
...
>>> Color.red
1
>>> Color.red=2
TypeError: 'frozendict' object does not support item assignment
>>> Color.yellow=4
TypeError: 'frozendict' object does not support item assignment
>>> Color.__dict__
frozendict({...})

The implementation avoids the private PyDictProxy for read-only types, type.__dict__ gives directly access to the frozendict (but type.__dict__=newdict is still blocked).

The "__final__=True" API is just a proposition, it can be anything else, maybe a metaclass.

Using a frozendict for type.__dict__ is not the only possible solution to implement read-only types. There are also Python implementation using properties. Using a frozendict is faster than using properties because getting an attribute is just a fast dictionary lookup, whereas reading a property requires to execute a Python function. The syntax to declare a read-only class is also more classic using the frozendict approach.

Victor
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to