Implementando un Dado

tny a.porrua en gmail.com
Vie Nov 23 13:17:34 CET 2007


El vie, 23-11-2007 a las 11:23 +0100, Beni escribió:
> On Nov 23, 2007 10:29 AM, tny <a.porrua en gmail.com> wrote:
> 
> >
> > El vie, 23-11-2007 a las 09:19 +0100, Beni escribió:
> > > Hola me gustaria encapsular alguna funcionalidad del modulo random en
> > una
> > > clase para simular la tirada de un dado, sería algo así:
> > ...
> > >     def tirada(min, max, cantidad=1, tipo=int):
> > ...
> > >         if type(int):
> > ...
> > >         elif type(float):
> > ...
> > no querrás decir type(tipo)=type(int) o algo de eso
> >
> 
> Si llevas razón, mi código es:
> 
> if type(tipo) = int:
if type(tipo) == int: ;)

>   ...
> elif type(tipo) = float:
>   ...
> 
> 
> > Yo personalmente pasaría del tipo=int y haría tipo='int' o tipo=INT
> > (siendo INT una constante)
> >
> > quedaría así
> > ...
> >    def tirada(min, max, cantidad=1, tipo='int'):
> > ...
> >        if tipo=='int':
> > ...
> >        elif tipo=='float':
> > ...
> >
> 
> Por que utilizar la comprobación de tipos con una cadena? es más eficiente?

No sé si es más eficiente o no, es como yo hago. 
Es pasar un valor que modifica el comportamiento de la función, puede ser como en este caso para decidir el tipo de resultado devuelto.
> 
> >
> > cuando haces dN=tirada(...) estas guardando en la variable dN el
> > resultado de realizar un tirada
> > puedes hacerlo de dos formas, con lambda y con __getattr__
> >
> > Suerte.
> 
> 
> Lo del lambda, no se exactamente como encajaría aquí.

D4=lambda:Dado.tirada(1,4)


> Lo del __getattr__ me parece estupendo, que sería algo así?
> 
> def __getattr__(name):
>   if name == 'd4':
>     return Dado.tirada(1,4)
>   else:
>     error
> 
> Se puede parsear el nombre para hacerlo más automático, extraer el N del
> dado... pero sería algo así?
> 
> Se puede utilizar getattr como método estatico?

No lo sé.
Pero una clase como todo lo demás es un objeto, no? 
sólo nos queda saber dónde hay que meter el __getattr__

Si no se pudiese hacer, la solución pro sería un singleton...
Yo personalmente, que no soy tan pro, cuando no necesito más que una
instancia de una clase, la creo en el módulo y la importo.

#librería Dado
class Dado:
	.....

dado=Dado()


from Dado import dado

t=dado.d4

------------ próxima parte ------------
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes


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