In addition to the print_value method described above, generated Python code also includes the usual Python __str__ method. The presence of this method allows you to manipulate a generated object as a string. Using the personnelRecord example from above:
print(personnelRecord)
or:
prstring = str(personnelRecord)
print(prstring)
The output of either of these print commands would be as follows:
{
name {
givenName = 'John'
initial = 'P'
familyName = 'Smith'
}
number = 51
title = 'Director'
dateOfHire = '19710917'
nameOfSpouse {
givenName = 'Mary'
initial = 'T'
familyName = 'Smith'
}
children[0] {
name {
givenName = 'Ralph'
initial = 'T'
familyName = 'Smith'
}
dateOfBirth = '19571111'
}
children[1] {
name {
givenName = 'Susan'
initial = 'B'
familyName = 'Jones'
}
dateOfBirth = '19590717'
}
}
You can see that the output is virtually the same as the output from the print_value call, except there is no name assigned to the entire grouping.
The __str__ method is called by the generated print_value method, but it can also be called directly by you if desired. Its signature is as follows:
def __str__(self, elem_name=None, indent_level=None):
The elem_name argument is a name to assign to the listing, and the indent_level argument controls the indentation of the outermost level of the listing. Each indent level results in an indentation of 3 spaces. So, again using the personnelRecord example, you can do this:
prstring = personnelRecord.__str__("ThisRecord", 1)
print(prstring)
The output of the print command would be as follows:
ThisRecord {
name {
givenName = 'John'
initial = 'P'
familyName = 'Smith'
}
number = 51
title = 'Director'
dateOfHire = '19710917'
nameOfSpouse {
givenName = 'Mary'
initial = 'T'
familyName = 'Smith'
}
children[0] {
name {
givenName = 'Ralph'
initial = 'T'
familyName = 'Smith'
}
dateOfBirth = '19571111'
}
children[1] {
name {
givenName = 'Susan'
initial = 'B'
familyName = 'Jones'
}
dateOfBirth = '19590717'
}
}
So in this case the output is all indented 3 spaces beyond the indentation from the previous examples, and the name assigned to the listing is "ThisRecord".