[
https://issues.apache.org/jira/browse/THRIFT-162?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12669300#action_12669300
]
Chad Walters commented on THRIFT-162:
-------------------------------------
I respectfully disagree with David here. The goal of interoperability across
languages supercedes the goal of being idiomatic in each language, at least in
my eyes.
Either we choose to violate Python's conventions here (effectively choosing
Java's "trust-the-programmer" model) or we limit sets to operating only on
basic types. Any kind of middle ground means that I have to anticipate whether
or not any of my clients will be in Python when I decide whether to include a
set of Thrift objects in my interface.
> 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: 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.