Re: [Python-es] Saber si un atributo es un descriptor

2015-12-14 Por tema Chema Cortes
El lun., 14 dic. 2015 a las 22:24, Kiko () escribió:

>
>
>> *import types*
>>>
>>>
>>>
>>>
>>>
>>> *a = 1for attr in dir(a):if isinstance(getattr(type(a), attr),
>>> types.GetSetDescriptorType):print(attr)*
>>> Y el resultado sería:
>>>
>>>
>>>
>>>
>>>
>>>
>>> *denominatorimagnumeratorreal*
>>>
>>
>> Vaya, acabo de cambiar *a* para que sea *complex* en lugar de *int* y mi
>> código de encima no me devuelve *img* y *real*, que son descriptores de
>> *complex*...
>>
>> :-(
>>
>
> Esto parece que sí funciona:
>
> *import types*
> *a = 1 + 2j*
>
>
>
> *for attr in dir(a):if isinstance(getattr(type(a), attr), *
>
>
> *  (types.GetSetDescriptorType,
> types.MemberDescriptorType)):print(attr)*
> Lo anterior parece que sí funciona. No entiendo muy bien la diferencia
> entre GetSetDescriptor y MemberDescriptor.
> ¿Sería lo anterior lo adecuado para resolver el problema?
>

Oficialmente, un descriptor es todo objeto con, al menos, un método
"__get__":

hasattr(attr, "__get__")


>
> Gracias.
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
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/


Re: [Python-es] __import__( ) cuando el "package" incluye un punto .

2015-12-14 Por tema Chema Cortes
El vie., 11 dic. 2015 a las 17:46, Jose Caballero ()
escribió:

> acabo de comprobar que tampoco se puede hacer un import normal
>
>  from 1.2 import foo
>
> Mmmm. Tal vez tenga que cambiar los paths a algo como
>
>  //package/api/v1_0/foo.py
>  //package/api/v1_1/foo.py
>  //package/api/v1_2/foo.py
>
>
Lo que no entiendo qué problema hay para no usar imp.load_source()

if cond12:
foo = imp.load_source("foo", "//package/api/v1_2/foo.py")
elif conf11:
foo = imp.load_source("foo", "//package/api/v1_1/foo.py")
else:
foo = imp.load_source("foo", "//package/api/v1_0/foo.py")


>
>
> El día 11 de diciembre de 2015, 11:42, Sergio Fernández
>  escribió:
> > Jamás se debe usar módulos con puntos!
> >
> > La convención viene de PEP8:
> > https://www.python.org/dev/peps/pep-0008/#package-and-module-names
> >
> > La razón es que en Python 2.4 se introduj el PEP328 con soporte para
> > los imports locales: https://www.python.org/dev/peps/pep-0328/
> >
> > Y por tanto utilizar punto entra en conflicto con esa caracteristica.
> >
> >
> > 2015-12-11 17:36 GMT+01:00 Jose Caballero :
> >> Hola,
> >>
> >>
> >> necesito hacer import de una serie de modulos, pero solo se sabe el
> >> path exacto en "run time".
> >> Trabajo con "legacy code" que hace el import de estos modulos con
> __import__( )
> >>
> >> Pero ahora los paths incluyen en punto, de esta forma
> >>
> >> /./package/api/1.0/foo.py
> >> /./package/api/1.1/foo.py
> >> /./package/api/1.2/foo.py
> >>
> >> Y al pasar "api.1.2.foo" como primer argumento a __import__( ), se hace
> un lio.
> >>
> >> Alguien tiene algun link donde explique como solventar esta silucion
> >> con __import__( ) ?
> >> NOTE: me interesa __import__( ), no imp( ), ni importlib, etc.
> >>
> >>
> >> Gracias por adelantado.
> >> Un saludo,
> >> Jose
> >> ___
> >> Python-es mailing list
> >> Python-es@python.org
> >> https://mail.python.org/mailman/listinfo/python-es
> >> FAQ: http://python-es-faq.wikidot.com/
> >
> >
> >
> > --
> > Sergio Fernández
> > http://www.wikier.org
> > ___
> > Python-es mailing list
> > Python-es@python.org
> > https://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> ___
> Python-es mailing list
> Python-es@python.org
> https://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
-- 
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/


[Python-es] Saber si un atributo es un descriptor

2015-12-14 Por tema Kiko
Hola.

Necesito identificar si un atributo de una clase es un descriptor.

Por ejemplo, para conocer los descriptores del built-in type *int* usaría
lo siguiente:

*import types*





*a = 1for attr in dir(a):if isinstance(getattr(type(a), attr),
types.GetSetDescriptorType):print(attr)*
Y el resultado sería:






*denominatorimagnumeratorreal*
Que creo son los únicos descriptores de

*int.*
¿Es esto correcto?
¿Un descriptor puede ser otra cosa que no sea *types.GetSetDescryptorType*?



*Gracias.*

*Saludos.*
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Saber si un atributo es un descriptor

2015-12-14 Por tema Kiko
El 14 de diciembre de 2015, 22:10, Kiko  escribió:

> Hola.
>
> Necesito identificar si un atributo de una clase es un descriptor.
>
> Por ejemplo, para conocer los descriptores del built-in type *int* usaría
> lo siguiente:
>
> *import types*
>
>
>
>
>
> *a = 1for attr in dir(a):if isinstance(getattr(type(a), attr),
> types.GetSetDescriptorType):print(attr)*
> Y el resultado sería:
>
>
>
>
>
>
> *denominatorimagnumeratorreal*
>

Vaya, acabo de cambiar *a* para que sea *complex* en lugar de *int* y mi
código de encima no me devuelve *img* y *real*, que son descriptores de
*complex*...

:-(


> Que creo son los únicos descriptores de
>
> *int.*
> ¿Es esto correcto?
>

Pues parece que no.


> ¿Un descriptor puede ser otra cosa que no sea *types.GetSetDescryptorType*
> ?
>
>
¿Alguna ayuda para poder detectar descriptores?


>
>
> *Gracias.*
>

De nuevo.


>
> *Saludos.*
>
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Saber si un atributo es un descriptor

2015-12-14 Por tema Kiko
> *import types*
>>
>>
>>
>>
>>
>> *a = 1for attr in dir(a):if isinstance(getattr(type(a), attr),
>> types.GetSetDescriptorType):print(attr)*
>> Y el resultado sería:
>>
>>
>>
>>
>>
>>
>> *denominatorimagnumeratorreal*
>>
>
> Vaya, acabo de cambiar *a* para que sea *complex* en lugar de *int* y mi
> código de encima no me devuelve *img* y *real*, que son descriptores de
> *complex*...
>
> :-(
>

Esto parece que sí funciona:

*import types*





*a = 1 + 2jfor attr in dir(a):if isinstance(getattr(type(a), attr),
  (types.GetSetDescriptorType,
types.MemberDescriptorType)):print(attr)*
Lo anterior parece que sí funciona. No entiendo muy bien la diferencia
entre GetSetDescriptor y MemberDescriptor.
¿Sería lo anterior lo adecuado para resolver el problema?

Gracias.
___
Python-es mailing list
Python-es@python.org
https://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/