Pour moi, la proposition de Arioch est clairement à ne pas faire en général
1) on a X variables à la place d'une seule donc on utilise beaucoup plus de ram pour pas gand chose (à la place d'écrire quelques lignes de code)
2) on peut avoir un comportement totalement erroné ! Si l'on modifie Client.city alors le fonctionnement des objets Client est faux puisque la variable d'instance n'est pas modifiée
3) A minima on n'utilise pas deux nom identiques pour 2 variables différentes ! class: _city et city pour l'instance (qui peut-être aussi une fonction attribut)
-------
L'exemple ici est un cas trop particulier pour en définir une bonne règle ... Mais on pouvait se passer de variable de classe et simplement faire un
def __init__(self, username, fullname, city="paris"):
-------
Si le but de Yuseph est de faire plusieurs affichages différents à partir d'un objet avec des datas qui sont éparpillées dans cet objet, il est possible de rendre cet objet itérable.
Tout le travail est à faire dans __iter__() __next__()
par exemple, pour ce cas simple:
1 2 3 4 5
| class Client:
...
def __iter__(self):
items = ("city", "username", "fullname")
return iter({(k,getattr(self, k)) for k in items}) |
Maintenant il est simple de faire une boucle sur les données depuis l'extérieur :
1 2 3 4
| for k,v in first_client:
print(k, ":", v)
# ou
print([i for i in first_client]) |
Partager