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/