Comment obtenir tous les objets dans un module en python?
J'ai besoin d'obtenir une liste de tous les objets à l'intérieur d'un module, et non pas une liste de leurs noms. Ainsi, par exemple, j'ai:
class myClass:
def __init__(self):
# here be code
pass
class thing1(myClass):
def __init__(self):
self.x = 1
class thing2(myClass):
def __init__(self):
self.x = 2
et ainsi de suite.
Ce que je veux, c'est quelque chose qui va me donner une liste des objets dans myClass
(thing1
thing2
) à partir de laquelle je peux appeler des méthodes /obtenir les attributs. Je suis en train de faire quelque chose comme ceci:
for myThing in dir(myClass):
print myThing.x
Mais la dir
fonction ne donne qu'une liste des noms des classes, et je ne peux pas obtenir l'attribut.
Comment puis-je faire cela?
source d'informationauteur NSP
Vous devez vous connecter pour publier un commentaire.
Si vous avez le nom d'un attribut dans une chaîne, vous devez utiliser
getattr
pour aller la chercher.Donné un module de X, vous pouvez obtenir une liste de tous les attributs et (par exemple) leurs types avec quelque chose comme ça.
Si vous voulez vraiment le membres d'une classe, d'une instance ou d'un module, il suffit d'utiliser la
vars()
builtin: http://docs.python.org/library/functions.html#vars (il fonctionne comme annoncé)Si vous voulez que les membres de la actuel module à partir de l'intérieur d'une fonction ou d'une classe (où
vars()
va faire la mauvaise chose), alors vous devriez utiliserglobals()
à la place.Toutefois, le code et les mots dans votre question ne correspondent pas. Vous dire vous souhaitez accéder aux objets "à l'intérieur"
myClass
mais alors vous poste le code qui est apparemment à la recherche pour les sous-classes demyClass
plutôt que de son contenu.Pour compléter Astérisque réponses avec quelques exemples de plus de jouer avec cela à l'invite de commandes:
Noter les différences entre ce qui est visible au niveau du module, sur chaque objet de classe et sur chaque instance de classe.
Notez également que, pour une définition de classe,
vars()
ne vous parler de toute les méthodes héritées. Elle aussi ne vais pas vous parler des méthodes qui sont disponibles par l'intermédiaire d'une instance de classe. Afin de voir correctement les deux de ceux-ci, votre meilleur pari est de faire comme Noufal suggère et à pieddir()
appelantgetattr()
pour chaque attribut.Je crois
locals()
vous donne un dictionnaire de toutes les variables locales et les objets qu'ils désignent.Vous pouvez également essayer d'utiliser le
eval()
ouexec()
fonctions pour évaluer les noms de la crue du code python. Ensuite, vous pouvez utiliser directement les résultats dedir()
.Ne sais pas si cela aide: