[Tutor] How to write the __str__ function
nulla.epistola at web.de
Sun May 14 15:44:27 EDT 2017
Am 14.05.2017 um 20:59 schrieb Martin A. Brown:
> Hello and greetings,
>> I need some advice that I have been embarrased to ask for, because
>> I think that my error is so elementary.
> Well, there are two benefits to trying to write down questions like
> this when you encounter them.
> 1) Rubber Duck debugging (if you have not heard of it); sometimes
> the act of describing the problem / question is enough for you
> to figure it out in the process
> 2) If you don't quite get there, then you have a description that
> somebody can easily review and respond to.
>> I have written, as advised by the tutors, a complex program in a
>> topic that interests me. The program works well and the tests are
> Right on!
>> Now I want to add a __str__ function, which I thought would be
>> straightforward. But I cannot get it right.
>> The code that I have so far is as folows:
>> def __str__(self):
>> " Output from __str__ of POCWP. "
>> "\n After the first turnover, during the "
>> "'Population Of Capitals Init' cycle,"
>> "\n the productivities were raised from 1.0 "
>> "\n to a specific Unit Constant Capital (UCC) "
>> "for each specific capital: "
>> "\n The input value for the mean of UCC "
>> "was %7.5f" % (self.ucc),
>> "\n The fractional sigma (FractionalSTD)"
>> " of UCC that was input was %7.5f " % (self.fractsigma_ucc))
>> The error message is:
>> TypeError: __str__ returned non-string (type tuple)
> I have, therefore, a few small suggestions:
> 1. Put all of the variables replacements at the end.
> thing = ("var x=%s\nvar y=%s" % (x,y))
> 2. When creating the replacements, also use tuples (see next
> point, too):
> "was %7.5f" % (self.ucc,)
If you put this into your original string, it won't work. Try this very
st = "abc %d" % 7 "def" # <- SyntaxError
The replacements definitely belong at the end, all together.
But an additional question: do you really want to get this very long
text every time you need an instance of your class as a string? Even if
it's put into another sentence using string formatting? Like this for
example (assuming your class is called MyClass):
x = MyClass(some, args)
s = """This is an instance of MyClass with the value %s. It was
initialized with the values some = %s, args = %s.""" % (x, some, args)
More information about the Tutor