[
https://issues.apache.org/jira/browse/THRIFT-4623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16592693#comment-16592693
]
Brian Forbis commented on THRIFT-4623:
--------------------------------------
I've also noticed this, as reported in THRIFT-4510. That one was marked as
RESOLVED due to the workaround you referenced, though I agree that this really
needs to be fixed.
> Python compiler generates inoperable definitions for default-valued classes
> in same thrift file
> -----------------------------------------------------------------------------------------------
>
> Key: THRIFT-4623
> URL: https://issues.apache.org/jira/browse/THRIFT-4623
> Project: Thrift
> Issue Type: Bug
> Components: Python - Compiler
> Affects Versions: 0.11.0
> Reporter: Matt Anthony
> Priority: Major
>
> Consider a thrift file as
>
> <code>
> struct A {
> i32 value;
> }
>
> struct B {
> A itm = {}
> }
> </code>
>
> The thrift compiler will generate class definitions for A and B, without
> `self.thrift_spec` defined, and at the end of the ttypes.py file will go back
> and populate the thrift_spec objects. However, in the __init__ method of B,
> the default value for `itm` would attempt to be set as `A(**{})`, which will
> crash with error `AttributeError: 'ObservationInfo' object has no attribute
> 'thrift_spec'`. This makes sense since at the time the default object is
> being established, there is no thrift_spec object.
> Removing the default value removes the error, but this is not correct
> behavior. The most obvious fix is that the `thrift_spec` object of each class
> needs to be defined within the class as the class is written, not at the end
> of the file after all the class objects are established. Moreover, that is
> generally good practice and is actually part of the PEP prescriptions for
> python (referencing objects before initialization in a class is a highlighted
> warning, for this very reason).
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)