Supposons que certaines classes soient définies et disponibles dans l'espace de noms global. Dans l'exemple:Comment appeler le constructeur de classe ayant son nom dans la variable de texte? [Python]
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
class Vector:
def __init__(self, alpha, r):
self.x = r * cos(alpha)
self.y = r * sin(alpha)
# and many others...
Comment faire ceci:
class_name = 'Point'
x = 14.361
y = -8.100
code_str = 'class_object = ' + class_name + '(' + str(x) + ', ' + str(y) + ')'
exec code_str # That evaluates to: "class_object = Point(14.361, -8.100)"
print class_object.x, class_object.y
sans utiliser le exec dangereux?
PS. J'ai l'intention de charger les données à partir d'un fichier txt ou json si quelqu'un le demande.
Charger les données, les chaînes à exécuter? On dirait une mauvaise idée. –
Vous n'avez pas besoin de 'exec' du tout. Chargez simplement vos données à partir de votre fichier texte, et passez-le au constructeur de la classe 'Point'. Simple. –
je sais que l'exécution du code à partir du fichier est très mauvaise idée :) mais j'ai beaucoup de classes - Point, ligne, Versor, et je ne sais pas à l'avance que je vais appeler –