Habemus Python 2.4

Chema Cortés py en ch3m4.org
Mie Dic 1 10:39:46 CET 2004


El Martes, 30 de Noviembre de 2004 22:01, Ernesto Revilla escribió:
> Cuando el parser lee la función, al procesar A, sigue siendo una función.
>
> Se convierte en método, cuando llama a la metaclase para construir la
> clase:


Ummm..Siendo academicista, sería mejor hablar de "descriptores". En python, el 
término 'def' define "descriptores", que luego serán funciones ó metodos, 
según si el tipo de uso que se dé. Podrías tranquilamente definir los métodos 
de una clase como si fueran simples funciones:

def f(self, arg1):
  print arg1

class A:
  meth1=f

a=A()
a.meth1("Hola")


No existe "conversión", estrictamente hablando, de función a método. El 
descriptor sigue inalterado. Tan sólo se sigue la regla de los descriptores:

"Si en el diccionario de un objeto aparece un descriptor, su lectura 
devolverá, en lugar de un objeto descriptor, el resultado de invocar el 
método __get__ del descriptor"

Por ejemplo:

def f(self):
  print self.valor

class A:
  def __init__(self):
    self.valor="Hola"

a=A()

>>> f.__get__(None,A)
<unbound method A.f>

>>> f.__get__(a,A)
<bound method A.f of <__main__.A instance at 0x402fcd2c>>

>>> f.__get__(a,A)()
Hola


No hay ninguna conversión entre función y método. Es más, ni siquiera hemos 
ligado la función a la clase.

En cuanto a los decoradores, se pueden ver como "wrappers" de descriptores: de 
un descriptor se devuelve otro descriptor. Daría igual estas dos versiones:

def deco(f):
  ....

@deco
def mymeth(self,arg):
 ...

class A:
  meth1=mymeth


que:


def deco(f):
 ...

class A:
   @deco
   def meth1(self,arg):
     ...







------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: no disponible
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20041201/b7e1f7f2/attachment.pgp>
------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es