El mar., 15 dic. 2015 a las 10:40, Kiko (<kikocorre...@gmail.com>) escribió:

>
> Como diría ese gran estadista, "It is very difficult, todo esto".
>

Más que complicado, los descriptores es lo que da a python toda su "magia".


>
> Creo que lo anterior resume, creo, lo que quiero:
>
> ¿Puedo comprobar si un descriptor funciona como un atributo de clase o
> como una *property* con el siguiente código?
> Cuando me refiero a descriptores en mi contexto de ignorancia supina estoy
> refiriéndome a cosas como *int.numerator, complex.real,...*
>
> *import types*
> *a = 1 + 2j*
>
>
>
> *for attr in dir(a):    if isinstance(getattr(type(a), attr), *
>
> *                      (types.GetSetDescriptorType,
> types.MemberDescriptorType)):        print(attr)*
>
> Es decir, ¿un descriptor que funciona como una *property*, atributo,...,
> solo puede ser instancia de* types.GetSetDescriptorType *o*
> types.MemberDescriptorType?*
>
>
Creo que empiezo a entender lo que quieres. Lo que denominas "propiedad", o
simplemente "descriptor", sería lo que se conoce como "descriptor de
datos". Son los descriptores a los que se pueden asignar valores, para
entendernos. Para ser "descriptor de datos" basta con tener un método
"__set__":

props = [attr for attr in dir(a) if hasattr(type(a), attr) and
hasattr(getattr(type(a),attr), "__set__")]

Los tipos "GetSetDescriptorType" y "MemberDescriptorType" son usados por
los módulos de extensión, los que se compilan desde C en el caso de
CPython. Pero es mucho más genérico indagar por atributos "__get__" y
"__set__" para saber si son descriptores, además de funcionar siempre.


-- 
Hyperreals *R  "Quarks, bits y otras criaturas infinitesimales":
http://ch3m4.org/blog
_______________________________________________
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a