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

Mariano Guerra luismarianoguerra en gmail.com
Dom Jun 17 06:04:39 ART 2012


2012/6/17 david <tenuki en gmail.com>:
> 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. :-( :-)

se podria escribir un import hook que reescriba el AST y reemplaze los
booleanos por tusbooleanos

una idea nomas

http://www.python.org/dev/peps/pep-0302/



More information about the pyar mailing list