[pyar] Por qué no se puede extender la clase bool?

david tenuki en gmail.com
Sab Jun 16 20:58:01 ART 2012


Buenas!

2012/6/16 Juanjo Conti <jjconti en gmail.com>:
> Estoy escribiendo el capítulo 5 (Limitaciones) de mi tesis de maestría
> sobre taintmode[1].
>
> Una de las limitaciones es que la biblioteca, que extiende
> automáticamente clases built-in de Python para hacerlas capaces de
> trackear manchas, no puede extender bool.
>
> Busco en Google: python cant extende bool
>
> El primer resultado es de Stack Overflow. Excelente, pienso. Hasta que
> veo que el que pregunta es mi yo del pasado :)[2]
>
> Una respuesta que cita a Guido está buena:
>
> '''
> I thought about this last night, and realized that you shouldn't be
> allowed to subclass bool at all! A subclass would only be useful when
> it has instances, but the mere existance of an instance of a subclass
> of bool would break the invariant that True and False are the only
> instances of bool! (An instance of a subclass of C is also an instance
> of C.) I think it's important not to provide a backdoor to create
> additional bool instances, so I think bool should not be subclassable.
> '''

Y para qué querías extenderla en particular?


Para mí, lo que se puede querer es agregarles métodos o propiedades,
cosa que tampoco se puede hacer. Claro que si se hiciera habría que
hacerlo de una manera de no romper nada.. pero quien depende de cosas
que True o False no tienen?
(sí, puede haber alguien que dependa de que False y True no tengan
algo.. pero ahí es discutible cuan bien programado está todo).

De cualquier manera, por ahí para evitar estos dos casos, lo que se me
ocurre que se podría intentar hacer es que el código generado nunca
use True / False sinó que use tuTrue tuFalse instancias de tuBool.
Se puede hacer eso? Se puede modificar el parser/compilador/quien
corresponda, para que cuando vaya a compilar haga eso?

Hasta donde habría que cambiar? Una cosa es que los métodos que se
compilan, cuando usan booleanos creen esos booleanos.. pero además,
habría que convertir los booleanos que devuelven otros objetos para
que también devuelvan booleanos del nuevo tipo.. :-(  o bien, wrappear
los booleanos devueltos por ellos para que se conviertan a los tu* ..

Bueno.. nada.. esa era una ideita que tenía que me parece que es un
poco complicada de implementar. :-( :-)

Saludos,
dave
-- 
 There is no dark side of the moon really. Matter of fact it's all dark.



More information about the pyar mailing list