Не знаю, почему вы захотите это сделать, поскольку в Python нет «простых» типов, это все объекты. Но это работает:
type(theobject).__name__ in dir(__builtins__)
Но явное перечисление типов, вероятно, лучше, так как оно более понятное. Или даже лучше: измените приложение, чтобы вам не нужно было знать разницу.
Обновление: проблема, требующая решения, заключается в том, как создать сериализатор для объектов, даже встроенных. Лучший способ сделать это - не создать большой phat-сериализатор, который по-разному обрабатывает встроенные функции, а искать сериализаторы по типу.
Примерно так:
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)
Таким образом, вы можете легко добавлять новые сериализаторы, а код легко поддерживать и очищать, поскольку каждый тип имеет свой собственный сериализатор. Обратите внимание, как тот факт, что некоторые типы встроены, стал совершенно неактуальным. :)