en boucle sur toutes les variables membres d'une classe en python
Comment obtenez-vous une liste de toutes les variables dans une classe c'est iteratable? Un peu comme les gens du pays(), mais pour une classe
class Example(object):
bool143 = True
bool2 = True
blah = False
foo = True
foobar2000 = False
def as_list(self)
ret = []
for field in XXX:
if getattr(self, field):
ret.append(field)
return ",".join(ret)
il doit retourner
>>> e = Example()
>>> e.as_list()
bool143, bool2, foo
- Pourquoi ne pouvez pas utiliser
for field in [ self.bool143, self.bool2, self.blah, self.foo, self.foobar2000 ]
? Comment se fait-il que vous ne connaissez pas les variables d'instance de la classe? - S. Lott: c'est ce que j'ai fini par faire de toute façon. Dans mon code, j'ai comme 40 variables, et j'ai pensé qu'il serait mieux et plus SEC pour ne pas avoir à effectuer manuellement l'itération de la liste.
- Double Possible de Itérer sur les attributs de l'objet en python
Vous devez vous connecter pour publier un commentaire.
vous donne tous les attributs de l'objet.
Vous avez besoin de filtrer les membres de méthodes, etc vous-même:
Vous donnera:
callable(attr)
travail? N'est-ce pasattr
une chaîne de caractères?vars(Example).items()
ouvars(instance.__class__).items()
au lieu dedir()
si vous voulez vérifier si son remboursables ou non, parce qu'dir ne retour "string
s que les noms..Si vous souhaitez que seules les variables (sans fonctions) utilisation:
vars
n' pas inclure les variables de classe, seulement les variables d'instance.vars(self)['_data']
devrait vous donner uniquement les variables de retour.members = list(vars(example).keys())
(au moins dans python3)vars
renvoie unedict
cartographie le nom de la variable de membre de la valeur.@truppo: votre réponse est presque correct, mais appelable renverra toujours false, puisque vous êtes juste de passage dans une chaîne de caractères. Vous avez besoin de quelque chose comme ce qui suit:
qui va filtrer les fonctions
—comme vous le voyez, que vous donne tous attributs, de sorte que vous aurez à filtrer un peu. Mais, fondamentalement,
dir()
est ce que vous cherchez.De l'utiliser.
Le moyen facile de le faire est d'enregistrer toutes les instances de la classe dans un
list
.Objets ne viennent pas à l'existence spontanément. Une partie de votre programme créé pour une raison. La création est faite pour une raison. En les recueillant dans une liste peut également être fait pour une raison.
Si vous utilisez une usine, vous pouvez le faire.