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
OK.

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):
       return("\n"
              "               Output from __str__ of POCWP. "
              "\n"
              "\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 simple example:

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)
print(s)

Greetings,
Sibylle


_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to