[pyar] Llamar a un método en una clase. No funciona.

Ezequiel Garcia elezegarcia en gmail.com
Jue Nov 8 21:08:32 ART 2012


Carlos,

On Thu, Nov 8, 2012 at 8:36 PM, Carlos Giménez <scire1905 en gmail.com> wrote:
> Hola a todos,
>
> actualmente estoy tratando de entrar al mundo de Python. En este momento
> estoy siguiendo un tutorial y en un punto desarrollo un script pero no
> funciona. Lo tomé exactamente como figura en el tuto.
>
> #!/usr/bin/env python
>
> class Atom (object):
>
>   "A class to represent a single atom"
>   def __init__(self, symbol, mass, position):
>     self.symbol = symbol
>     self.mass = mass
>     self.position = position
>
>   def symbol(self):
>     return self.symbol
>
>   def mass(self):
>     return self.mass
>
>   def position(self):
>     return self.position
>
> oAtom = Atom('O', 15.9994, [0.0, 0.0, 0.0])
> hAtom1 = Atom('H', 1.0079, [0.0, 1.0, 0.0])
> hAtom2 = Atom('H', 1.0079, [1.0, 0.0, 0.0])
>
> print 'The mas of the second H atom is', hAtom2.position()
>
>
>
> No se como hacer para que imprima los parámetros que pido.
>
> Cualquier ayuda me sirve.
>

Ejecutando ese código obtengo esto:

Traceback (most recent call last):
  File "atom.py", line 24, in <module>
    print('The mas of the second H atom is', hAtom2.position())
TypeError: 'list' object is not callable

---

Lo cuál está perfecto, porque tenés una variable tipo lista llamada "position"
y esa variable no es un método, o en otras palabras no es "callable" (llamable).
O sea, el método "position" quedó tapado por la variable "position".

No soy experto en python, pero supongo que lo que está pasando es esto:

Cómo python es "muy" dinámico, primero se define un método con "def position".
(Este método se guarda en la variable "position", por decirlo así).

Luego en el __init__ (que NO es un constructor) se sobre-escribe la variable
y se guarda una lista. O sea, luego del __init__ hay una variable tipo lista
llamada "position". El método se perdió, fue reemplazado por la lista.

Si le ponés otro nombre a la lista o al método, te va a funcionar.

Por otro lado, te recomiendo NO usar nombres iguales para variables y para
métodos.

Bue... traté de explicarlo lo más claro posible. Si me equivoqué en algo,
pueden los esspertos corregirme ;-)

    Ezequiel



More information about the pyar mailing list