"Marko Rauhamaa"  wrote in message news:87inrer0dl....@elektro.pacujo.net...

"Frank Millman" <fr...@chagford.com>:

> 3. When instantiating an object, check if it would need computation -
>    if computation_required:
>        self.getval = self._getval_with_comp
>    else:
>        self.getval = self._getval
>
> 4. In _getval_with_comp, perform the computation, then add the > following -
>        self.getval = self._getval
>        return self._getval()
>
> What is the verdict? -1, 0, or +1?

Perfectly cromulent, run-of-the-mill Python code.


Gah! The law of unintended consequences strikes again!

As I mentioned, the class in question represents a database column. A separate class represents a database row. I have a __str__() method on the 'row' class that prints a nicely formatted representation of the object with all of its column objects and their values.

With the above changes, I had to turn getval() into a coroutine. My __str__() method uses getval() to obtain the values, so I had to prefix getval() with 'await', but then I get a syntax error on __str__(). I can add 'async' to remove the syntax error, but then print(obj) does not work - TypeError: __str__ returned non-string (type coroutine)

I don't think there is an answer to this, but any suggestions will be appreciated.

I can say 'print(await obj.__str__())', and it works, but I lose the ability to include it in a larger print statement.

Ah well :-(

Frank


--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to