<div dir="ltr"><br><br>вторник, 16 октября 2018 г., 12:29:55 UTC+3 пользователь Steven D'Aprano написал:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;"><br>> It seems to me that we would need this restriction to make a reasonably
<br>> universal frozendict that is, itself, hashable.
<br>
<br>When people talk about frozendicts being hashable, they mean it in the 
<br>same sense that tuples are hashable. 
<br>
<br>
<br>For what it is worth, here's an incomplete, quick and dirty proof of 
<br>concept frozendict, using automatic delegation:
<br>
<br># Not good enough for production, not tested, buyer beware, etc.
<br>class frozendict:
<br>    def __new__(cls, *args, **kwargs):
<br>        d = dict(*args, **kwargs)
<br>        proxy = types.MappingProxyType(d)
<br>        instance = super().__new__(cls)
<br>        instance.__proxy = proxy
<br>        return instance
<br>    def __hash__(self):
<br>        return hash(tuple(self.items()))
<br>    def __getattr__(self, name):
<br>        return getattr(self.__proxy, name)
<br>    def __getitem__(self, key):
<br>        return self.__proxy[key]
<br>    def __repr__(self):
<br>        return "%s(%r)" % (type(self).__name__, dict(self))
<br>
<br></blockquote><div>For those who need more performant variant (Cython compiled) of frozendict <a href="https://pypi.org/project/frozenmap/">frozenmap</a> project can be offer.<br></div></div>