Non che io sappia perché vorresti farlo, dato che non ci sono tipi "semplici" in Python, sono tutti oggetti. Ma questo funziona:
type(theobject).__name__ in dir(__builtins__)
Ma elencare esplicitamente i tipi è probabilmente migliore in quanto è più chiaro. O ancora meglio: cambiare l'applicazione in modo da non aver bisogno di sapere la differenza.
Aggiornamento: il problema che deve essere risolto è come creare un serializzatore per gli oggetti, anche quelli integrati. Il modo migliore per farlo non è creare un serializzatore Phat che tratti i builtin in modo diverso, ma cercare i serializzatori in base al tipo.
Qualcosa di simile a questo:
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)
In questo modo è possibile aggiungere facilmente nuovi serializzatori, e il codice è facile da mantenere e chiaro, come ogni tipo ha la propria serializzatore. Si noti come il fatto che alcuni tipi siano incorporati è diventato completamente irrilevante. :)
fonte
2009-08-24 12:32:47
Che cosa si intende per tipo "nativo"? Intendi costruzione? Perché hai bisogno di saperlo? Python non è C++ o Java, quindi non c'è distinzione tra tipi "semplici" o "nativi". Cosa stai cercando di fare? –
Sì, suppongo che intenda i tipi "incorporati". Ho bisogno di tale rappresentazione di un oggetto, che ho potuto usarlo in JSON serializzazione. simplejson "gestisce" solo questi tipi. In altri casi (quando l'oggetto è istanze di classi "fatte in casa") ho bisogno di creare oggetti dict. –
Sapete che simplejson ha qualcosa chiamato "decodifica oggetto" e "codifica oggetto"? –