Не то чтобы я знал, почему вы хотели бы это сделать, поскольку в 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)
Таким образом, вы можете легко добавлять новые сериализаторы, а код легко поддерживать и очищать, так как у каждого типа есть свой сериализатор. Обратите внимание, что тот факт, что некоторые типы являются встроенными, стал совершенно неуместным. :)
person
Lennart Regebro
schedule
24.08.2009