Ho letto sugli avvertimenti espliciti di stackoverflow contro l'utilizzo di eval () per creare oggetti. La ragione che sembra essere data è che il codice maligno potrebbe essere iniettato e oggetti creati ciecamente potrebbero compromettere un sistema. Tuttavia, questo argomento di intento malevolo non è invalidato dall'argomento consenziente-adulto?
Alcuni esempi di codice:
class Test(object):
def __init__(self, vala, valb, valc):
self._vala = vala
self._valb = valb
self._valc = valc
def __repr__(self):
return "<Test(vala={0}, valb={1}, valc={2})>".format(self._vala, self._valb, self._valc)
testlist = [dict(cls="Test", vala="this is vala", valb="this is valb", valc="this is valc"), dict(cls="Test", vala="this is vala II", valb="this is valb II", valc="this is valc II")]
mytestobjects = []
for test in testlist:
newobj = eval(test['cls'])(**{key: value for key, value in test.items() if key != "cls"})
mytestobjects.append(newobj)
print(mytestobjects)