[ 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)