No sé por qué querrías hacerlo, ya que no hay ningún tipo "simple" en Python, son todos los objetos. Pero esto funciona:
type(theobject).__name__ in dir(__builtins__)
Pero la enumeración explícita de los tipos es probablemente mejor, ya que es más claro. O incluso mejor: cambiar la aplicación para que no tenga que saber la diferencia.
Actualización: El problema que necesita solución es cómo hacer un serializador para objetos, incluso aquellos incorporados. La mejor forma de hacerlo es no crear un gran serializador de phat que trate las construcciones de manera diferente, sino buscar serializadores según el tipo.
Algo como esto:
def IntSerializer(theint):
return str(theint)
def StringSerializer(thestring):
return repr(thestring)
def MyOwnSerializer(value):
return "whatever"
serializers = {
int: IntSerializer,
str: StringSerializer,
mymodel.myclass: MyOwnSerializer,
}
def serialize(ob):
try:
return ob.serialize() #For objects that know they need to be serialized
except AttributeError:
# Look up the serializer amongst the serializer based on type.
# Default to using "repr" (works for most builtins).
return serializers.get(type(ob), repr)(ob)
esta manera usted puede añadir fácilmente nuevos serializadores, y el código es fácil de mantener y claro, ya que cada tipo tiene su propia serializador. Observe cómo el hecho de que algunos tipos estén integrados se volvió completamente irrelevante. :)
¿Qué quiere decir con el tipo "nativo"? ¿Te refieres a builtin? ¿Por qué necesitas saber esto? Python no es C++ o Java, por lo que no hay distinción entre tipos "simples" o "nativos". ¿Que estás tratando de hacer? –
Sí, supongo que me refiero a los tipos "integrados". Necesito tal representación de un objeto, que podría usarlo en la serialización JSON. simplejson "maneja" solo esos tipos. En otros casos (cuando el objeto son instancias de clases "caseras") necesito crear objetos dict. –
¿Sabe que simplejson tiene algo llamado "decodificación de objetos" y "codificación de objetos"? –