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