Pas que je sache pourquoi vous voudriez le faire, car il n'y a pas de types "simples" en Python, ce sont tous des objets. Mais cela fonctionne:
type(theobject).__name__ in dir(__builtins__)
Mais énumérer explicitement les types est probablement meilleur car il est plus clair. Ou encore mieux: Changer l'application pour ne pas avoir besoin de connaître la différence. Mise à jour: Le problème à résoudre est de savoir comment créer un sérialiseur pour les objets, même ceux qui sont intégrés. La meilleure façon de le faire est de ne pas faire un grand sérialiseur phat qui traite différemment les builtins, mais de rechercher des sérialiseurs basés sur le type.
Quelque chose comme ceci:
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)
De cette façon, vous pouvez facilement ajouter de nouveaux serializers, et le code est facile à entretenir et claire, que chaque type a son propre sérialiseur. Remarquez comment le fait que certains types sont intégrés est complètement hors de propos. :)
Qu'entendez-vous par type «natif»? Voulez-vous dire builtin? Pourquoi avez-vous besoin de savoir cela? Python n'est pas C++ ou Java, donc il n'y a pas de distinction entre les types "simples" ou "natifs". Qu'essayez-vous de faire? –
Oui, je suppose que je veux dire "builtin" types. J'ai besoin d'une telle représentation d'un objet, que je pourrais utiliser dans la sérialisation JSON. Simplejson "manipule" uniquement ces types. Dans d'autres cas (lorsque des objets sont des classes "maison"), j'ai besoin de faire des objets dict. –
Vous savez que simplejson a quelque chose appelé "décodage d'objet" et "encodage d'objet"? –