Pequeña introducción

dvilla en gmx.net dvilla en gmx.net
Vie Jun 29 12:33:48 CEST 2007


El Fri, 29 Jun 2007 11:33:53 +0200
"Chema Cortes" <pych3m4 en gmail.com> escribió:

> El 28/06/07, dvilla en gmx.net <dvilla en gmx.net> escribió:
> 
> > He escrito una pequeña introducción al uso de metaclases. Es
> > bastante sencillo y didáctico (o esa era la intención). Quizá a
> > alguno os pueda resultar útil.
> >
> > http://crysol.org/node/600
> 
> Una muy buena introducción. Hay algunas cosas que me gustaría
> puntualizar de lo que he leído:
> 
> Cuando dices, más o menos por la mitad del artículo: "...definir un
> método con el decorador @classmethod en una clase normal es
> equivalente a definir ese mismo método (sin el decorador) en su
> metaclase." no es del todo cierto. La diferencia está en que una clase
> es una instancia de la clase "type", mientras que una "metaclase" es
> una "subclase" de "type". Hay por ahí un pequeño lío entre método de
> clase y método de la instancia difícil de distinguir debido a que
> estás hablando de instancias que son a su vez clases. Quizás por éso
> no te parecía bien el término "metamétodo": 

En realidad no me gusta el término metamétodo porque creo que no encaja
en el significado de "meta". Si un metamodelo es el modelo de un
modelo y una metaclase es la clase de una clase, ¿un metamétodo es el
método de un método?

Tampoco encaja con los otros significados del prefijo 'meta':

meta-.

(Del gr. μετα-).

1. elem. compos. Significa 'junto a', 'después de', 'entre' o 'con'.
Metacentro, metatórax.

> los metamétodos no pasan a
> las clases fabricadas por las metaclases, mientras que los "métodos de
> clase" sí que pasan a sus instancias.

Admito que este punto no lo tengo todo lo claro que debería. ¿Lo que
dices es que un método de la metaclase no se puede invocar por una
clase fabricada con ella? Te refieres a este ejemplo supongo:

'''
>>> class MyMetaclase2(type):
...    def habla(cls):
...       print 'método de la clase', cls
...
>>> MyMetaclase2.habla()
TypeError: unbound method habla() must be called with MyMetaclase2
instance as first argument (got nothing instead)
>>> A = MyMetaclase2('A', (), {})
>>> A.habla()
método de la clase <class '__main__.A'>
>>> a1 = A() # una instancia de la clase A
>>> a1.habla()
'A' object has no attribute 'habla'
'''

Si te refieres a eso, ahora si que estoy hecho un lío, porque
ese ejemplo dice lo contrario. Acláramelo por favor y ya corrijo la
receta.


> Por lo demás, todo correcto. Espero que lo completes con nuevos
> artículos. Echo en falta una explicación de los descriptores y cómo se
> vinculan éstos a clases e instancias. Te aconsejaría que echaras un
> vistazo a "http://cafepy.com"

Lo miraré. No soy ningún experto en Python, mi única intención es contar
lo poco que sé, así que agradezco mucho este tipo de crítica
constructiva. Muchas gracias Chema.


------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 189 bytes
Desc: no disponible
URL: <http://mail.python.org/pipermail/python-es/attachments/20070629/dd4ceef1/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