Вы можете попробовать, хотя, вероятно, очень, очень плохую практику:
def get_class_instance(nm) :
try :
return eval(nm+'()')
except :
return None
Также, чтобы сделать это более безопасным, вы можете дать eval локальный хеш: eval(nm+'()', {'Pigeon':pigeon})
Я не уверен, что это сработает, и у него определенно есть проблема: если есть функция, называемая значением nm
, она выдаст:
def Pigeon() :
return "Pigeon"
print(get_class_instance('Pigeon')) # >> 'Pigeon'
РЕДАКТИРОВАТЬ : Другой способ сделать это, возможно (не проверено), если вы знаете модуль:
(Извините, я постоянно забываю, что это не obj.hasattr, это hasattr (obj)!)
import models as m
def get_class_instance(nm) :
if hasattr(m, nm) :
return getattr(m, nm)()
else : return None
РЕДАКТИРОВАТЬ 2 : Да, это работает! Woo!