exec

Peter Otten __peter__ at web.de
Thu Mar 1 12:14:54 EST 2012


Rolf Wester wrote:

> The reason to use exec is just laziness. I have quite a lot of classes
> representing material data and every class has a number of parameters.
> The parameter are Magnitude objects (they have a value and a unit and
> overloaded special functions to correctly handle the units). I want to
> have getter functions that either return the Magnitude object or just the
> value:
> 
> iron = Iron()
> iron.rho(0) => value
> iron.rho() => Magnitude object
> 
> def rho(self, uf=1):
>     if uf == 1:
>         return self._rho
>     else:
> return self._rho.val
> 
> And because this would mean quite a lot of writing I tried to do it with
> exec.

Make the Magnitude class callable then:

>>> class Magnitude(object):
...     def __init__(self, value):
...             self.value = value
...     def __call__(self, uf=1):
...             if uf == 1:
...                     return self
...             return self.value
...
>>> class Iron(object):
...     def __init__(self):
...             self.rho = Magnitude(42)
...
>>> iron = Iron()
>>> iron.rho()
<__main__.Magnitude object at 0x7fb94062be10>
>>> iron.rho(0)
42





More information about the Python-list mailing list