2010-04-21 4 views
0

Mes données d'entrée sont une chaîne représentant le type de modèle de banque de données que je souhaite créer. En python, j'utilise la fonction eval() pour instancier le modèle (sous le code), mais cela semble trop complexe, donc je me demandais s'il y a une façon plus simple pour les gens de faire ça?Instancier un modèle lorsque le type de modèle requis est représenté par un argument de chaîne

>>>model_kind="TextPixels" 
>>>key_name_eval="key_name" 
>>>key_name="key_name" 
>>>kwargs 
{'lat': [0, 1, 2, 3], 'stringText': 'boris,ted', 'lon': [0, 1, 2, 8], 'zooms': [0, 10]} 
>>>obj=eval(model_type + '(key_name='+tester+ ',**kwargs)') 
>>>obj 
<datamodel.TextPixels object at 0xed8808c> 
+0

code ci-dessus est source de confusion. Ce code est la même idée mais plus facile à comprendre: >>> eval_key_name = "nom_clé" >>> nom_clé = "BORIS" >>> obj = eval (type_modèle + '(nom_clé =' + nom_clé_éval + ', ** kwargs) ') –

Répondre

0

Nick Johnson a répondu à une autre question de la mienne qui répond également à cette question. La partie clé de ce qui est ci-dessous. Fondamentalement, un modèle d'usine ou la fonction ou le dictionnaire est nécessaire, ce qui est un avantage clé de Python, dont la plupart connaissent des gens comme moi, mais oublier ....

Il a écrit:

Au lieu de cela, vous devriez probablement définir une méthode de fabrication , comme ceci:

class MyModel(db.PolyModel): 
    @classmethod 
    def create(cls, foo, bar): 
    # Do some stuff 
    return cls(foo, bleh) 
Questions connexes