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

fisa fisadev en gmail.com
Vie Nov 9 12:02:31 ART 2012


El día 9 de noviembre de 2012 07:01, Angel Java Lopez
<ajlopez2000 en gmail.com> escribió:
> Gracias, Carlos, por tu ejemplo de mas abajo.
>
> Como dice Fisa, en Python te encontras conque estas redefiniendo position
> para el objeto. Asi que tu ejemplo me sirvio para detectar algo que no hacia
> "a lo Python".
>
> Cuando evaluo en tu ejemplo hAtom2.position() hago algo como:
>
> - Es una invocacion
> - Busco la clase de hAtom2, que es Atom
> - Resuelvo position EN LA CLASE Atom, que me da un metodo
> - Lo invoco
>
> muy a lo Smalltalk. Tengo que hacer:
>
> - Buscar el atributo position en EL OBJETO hAtom2
> - Invocarlo como metodo (lo que me va a dar error por estar definido como
> valor simple)

El proceso que hace python es este:

if "position" existe en el objeto:
    invoco al "position" del objeto
elif "position" existe en la clase del objeto:
    invoco al "position" de la clase

(en realidad hace muchas más cosas que eso, con cosas como el uso de
__attr__ y etc, pero acá no nos interesan)

>
> Asi que ahora me pongo a escribir test, y a arreglarlo ;-)
>
> Ah! Tendria que probarlo, pero deberia andar tu codigo si
>
> print 'The mas of the second H atom is', hAtom2.position()
>
> es reemplazado por
>
> print 'The mas of the second H atom is', Atom.position(hAtom2)
>
> funcionara?

Sip, funciona, y es algo que se usa a veces cuando queremos invocar
cosas overrideadas. Pero *para nada* lo recomendaría en este caso,
jeje.
No es para nada la manera en la que esas cosas se recomiendan usar.
- Métodos y atributos no deberían pisarse en nombres, así los métodos
de instancia se pueden usar normalmente como instancia.metodo().
- El uso de Clase.metodo(instancia) es útil para invocar métodos
overrideados al heredar, y para algún otro caso raro, pero no es la
manera estándar de invocar a métodos de instancia.

> Angel "Java" Lopez
> @ajlopez
> gh:ajlopez
>
> 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.
>>
>> Saludos!
>>
>> _______________________________________________
>> pyar mailing list pyar en python.org.ar
>> http://listas.python.org.ar/listinfo/pyar
>>
>> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>>
>> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
>> Argentina - http://www.usla.org.ar
>
>
>
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
> La lista de PyAr esta Hosteada en USLA - Usuarios de Software Libre de
> Argentina - http://www.usla.org.ar



--
fisa  -  Juan Pedro Fisanotti



More information about the pyar mailing list