Comment convertir une chaîne de nom de variable?
Je voudrais savoir comment faire pour convertir une chaîne de caractères d'entrée dans un nom de variable à utiliser dans du code Python. Un exemple concret:
def insrospect(foo, bar):
requested_module = makestringvariable(foo)
requested_object = makestringvariable(bar)
import requested_module
for item in inspect.getmemebers(requested_module.requested_object):
member = makestringvariable(item[0])
if callable(requested_object.member):
print item
if __name__ == '__main__':
introspect(somemodule, someobject)
Voici donc ci-dessus, parce que je ne sais pas quel module à connaître avant de se lancer, j'ai besoin de convertir la chaîne de caractères à un utilisable nom du module et parce que getmembers()
renvoie les membres comme des chaînes de caractères, j'ai aussi besoin d'eux pour être converti en utilisable noms de variables pour vérifier si elles sont disponibles.
Est-il une telle makestringvariable()
fonction?
ce n'est pas une très bonne idée d'utiliser un "objet" comme un nom de variable, car il est en conflit avec Python2 de type "objet" ou Python3 "objet" de la classe.
Merci pour toutes vos réponses les gars!
S'il vous plaît, veuillez, s'il vous plaît recherche: stackoverflow.com/search?q=%5Bpython%5D+string+variable+name. Cette question -- dans le littéral de ce formulaire -- a déjà été posée des centaines de fois.
je n'ai fait de regarder pour ces et regardé dans la doc python depuis hier, mais les questions sont ici pour convertir les noms de variables dans la chaîne et de la une question au sujet de la conversion de chaîne de caractères pour le nom de variable est en fait sur le formatage de chaîne de caractères. Merci pour le contrôle, et si vous pouvez pointer vers une des questions dont le contenu répond à ma question, je suis prêt à accepter mon erreur 🙂
des questions, posez - [comment] pour convertir les noms de variable en chaîne" Qui est clairement faux. Je suppose que vous n'avez pas vraiment les lire très attentivement. stackoverflow.com/questions/1009831/..., par exemple, est un doublon.
Merci pour toutes vos réponses les gars!
S'il vous plaît, veuillez, s'il vous plaît recherche: stackoverflow.com/search?q=%5Bpython%5D+string+variable+name. Cette question -- dans le littéral de ce formulaire -- a déjà été posée des centaines de fois.
je n'ai fait de regarder pour ces et regardé dans la doc python depuis hier, mais les questions sont ici pour convertir les noms de variables dans la chaîne et de la une question au sujet de la conversion de chaîne de caractères pour le nom de variable est en fait sur le formatage de chaîne de caractères. Merci pour le contrôle, et si vous pouvez pointer vers une des questions dont le contenu répond à ma question, je suis prêt à accepter mon erreur 🙂
des questions, posez - [comment] pour convertir les noms de variable en chaîne" Qui est clairement faux. Je suppose que vous n'avez pas vraiment les lire très attentivement. stackoverflow.com/questions/1009831/..., par exemple, est un doublon.
OriginalL'auteur Benjamin | 2011-05-25
Vous devez vous connecter pour publier un commentaire.
avec le __import__ de la fonction et de la getattr magie, vous serez en mesure d'écrire directement ce :
__import__
ne reviendra pas à quoi vous vous attendez à quand le nom contient des points, il vaut mieux utiliserimportlib.import_module
.Plus Plus : grand module, j'ai utilisé pour découper moi-même les parties de ces déclarations d'importation. J'ai appris une chose très belle 🙂 et édité ma réponse.
Merci c'est exactement ce dont j'avais besoin, incroyable 🙂 Donc je pourrais même ajouter des membres à une classe de cette façon comme
getattr(self, string) = value
?utilisation setattr(de soi, de la chaîne de valeur) au lieu de getattr de définir une valeur 😉
édric: encore mieux! 🙂 -- i loove Python 😀
OriginalL'auteur Cédric Julien
Vous ne pouvez pas convertir une chaîne de caractères dans une variable en tant que tel, parce que les variables sont une partie de votre code, n'est pas de votre données. Généralement, si vous avez un besoin de "variables", comme c'était le cas, vous devez utiliser une dict:
Et ensuite utiliser
data[foo]
au lieu de tenter de l'utiliserfoo
comme une variable. Cependant, dans cet exemple, vous êtes en train de demander à propos de l'importation d'un module par le biais d'une chaîne, et sur l'obtention d'attributs à l'aide d'un nom de chaîne, qui sont tous deux des services de Python fournit: à travers les__import__
etgetattr
fonctions.+1: C'est le plus sensible de la solution, et de loin.
OriginalL'auteur Thomas Wouters
Membres d'un module sont les attributs sur ce module, de sorte que vous pouvez utiliser
getattr
sur le module objet à récupérer.Le module des objets eux-mêmes sont stockés dans le
sys.modules
dictionnaire:sys.modules
. Vous devez__import__
.Il est vrai, mais j'étais en supposant qu'elle a été importée. 🙂
Il est bon de savoir sur
sys.modules
.OriginalL'auteur Martijn Pieters