[ https://issues.apache.org/jira/browse/THRIFT-162?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
David Reiss updated THRIFT-162: ------------------------------- Attachment: immut-no-slots-v1.diff Okay. Here is my version without the slots stuff. Slots don't prevent you from doing {code} object.__setattr__(my_immut, 'field', value) {code} so a really crafty hacker can still break his own program. Therefore, there is not much need to block __dict__. Obviously the patch is much simpler. We can still consider using slots, but I think it should be a separate discussion, and it is lower priority. We still have to implement immutable lists, sets, and (gasp) maps, both in the readers and render_const_value before this will actually work, though. > Thrift structures are unhashable, preventing them from being used as set > elements > --------------------------------------------------------------------------------- > > Key: THRIFT-162 > URL: https://issues.apache.org/jira/browse/THRIFT-162 > Project: Thrift > Issue Type: Bug > Components: Compiler (Python), Library (Python) > Reporter: Esteve Fernandez > Priority: Minor > Attachments: immut-no-slots-v1.diff, thrift-162_annotiations.patch, > thrift-162_v2_annotiations.patch, thrift_py_hash.patch > > > Let Foo be a Thrift structure: > struct Foo { > 1: i32 bar > } > If you want to use it properly as a set element or a as a dictionary key, the > autoegenerated Python code will complain about not being hashable: > >>> f1 = Foo() > >>> f1.bar = 1 > >>> f2 = Foo() > >>> f2.bar = 1 > >>> f1 == f2 > True > >>> set([f1]) & set([f2]) > set([]) > >>> d = {} > >>> d[f1] = 2 > Traceback (most recent call last): > File "<stdin>", line 1, in <module> > TypeError: unhashable instance > Since Thrift structures already implement __eq__ and __ne__, they should > implement __hash__ as well. The attached patch tries to mimic the behaviour > of the Java compiler, including a HashCodeBuilder class written in Python. -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.