[
https://issues.apache.org/jira/browse/THRIFT-4623?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17608619#comment-17608619
]
Grzegorz Lyczba commented on THRIFT-4623:
-----------------------------------------
We also have another issue with it. Default values have only one instance so
changes for mutable types will be applied to all objects:
{code:java}
>>> from gen.test import ttypes
>>> b1 = ttypes.B()
>>> b1
B(itm=A(value=None))
>>> b1.itm.value = 1
>>> b2 = ttypes.B()
>>> b2
B(itm=A(value=1)){code}
> 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
(v8.20.10#820010)