[pyar] Consulta sonsa
nachopro
tranceway en gmail.com
Mar Abr 3 13:41:18 ART 2012
2012/4/3 fisa <fisadev en gmail.com>:
> La cuestión de fondo es que en realidad en python las clases no
> definen los atributos que van a tener las instancias, como pasa en la
> mayoría de los otros lenguajes.
> La clase solo define el comportamiento (métodos de instancia) y
> después lo que sea referido a la clase en sí, pero no define qué
> atributos va a tener una instancia de ella.
>
> En python los atributos son algo propio de la instancia, y por eso
> varias instancias de una misma clase pueden tener atributos diferentes
> entre sí. En el __init__ lo que se hace es *agregarle* los atributos
> que queremos a la instancia recién creada (que recibís en el parámetro
> self).
> El __init__ no "define" los atributos que tienen todas instancias de
> una clase, sino que "agrega" atributos a una instancia específica (la
> que recién se creó). Pero esa instancia ya fue creada, ya es una
> instancia de la clase *antes* de que le agreguemos todos los
> atributos, porque los atributos no son algo definido por su clase.
>
> Por eso funciona esto:
>
> import random
>
> class Cosa:
> def __init__(self):
> tipo = random.randint(0, 3)
> if tipo == 1:
> self.nombre = ''
> self.edad = 0
> elif tipo == 2:
> self.ancho = 0
> self.alto = 0
>
> (notar que el tipo puede ser 0, en cuyo caso no le agregamos atributos
> a la instancia)
>
> Fijate que diferentes instancias de Cosa tendrían diferentes atributos
> (incluso ninguno extra), porque el __init__ de Cosa agrega atributos
> diferentes a self aleatoriamente.
>
> Por eso, porque los atributos de las instancias *no* están definidos
> en la clase, es que no podés preguntarle a la clase qué atributos van
> a tener sus instancias.
>
> Saludos!
class Persona(object):
__slots__ = ('nombre', 'apellido', 'dni',)
y chau picho!
http://docs.python.org/reference/datamodel.html#slots
--
ignacio benedetti a.k.a. nachopro
mailto:tranceway en gmail.com
http://blog.nachopro.com.ar/
More information about the pyar
mailing list