(« variables » désigne ici « noms », je pense, pas tout à fait sûr les Pythoneux définition utilisent)"Pythonique" façon de "réinitialiser" les variables d'un objet?
J'ai un objet et des méthodes. Ces méthodes ont toutes besoin et toutes changent les variables de l'objet. Comment puis-je, dans le plus pythonique et dans le meilleur, en respectant les techniques de POO, parvenir à avoir les variables d'objet utilisées par les méthodes mais aussi garder leurs valeurs originales pour les autres méthodes?
Dois-je copier l'objet chaque fois qu'une méthode est appelée? Dois-je sauvegarder les valeurs d'origine et avoir une méthode reset() pour les réinitialiser chaque fois qu'une méthode en a besoin? Ou y a-t-il un moyen encore meilleur?
EDIT: Le pseudocode m'a été demandé. Depuis que je suis plus intéressé à comprendre le concept plutôt que de résoudre spécifiquement le problème que je rencontrais, je vais essayer donner un exemple:
class Player():
games = 0
points = 0
fouls = 0
rebounds = 0
assists = 0
turnovers = 0
steals = 0
def playCupGame(self):
# simulates a game and then assigns values to the variables, accordingly
self.points = K #just an example
def playLeagueGame(self):
# simulates a game and then assigns values to the variables, accordingly
self.points = Z #just an example
self.rebounds = W #example again
def playTrainingGame(self):
# simulates a game and then assigns values to the variables, accordingly
self.points = X #just an example
self.rebounds = Y #example again
Ce qui précède est ma classe pour un objet Player (pour l'exemple suppose qu'il est un ballon de basketball). Cet objet a trois méthodes différentes qui assignent toutes des valeurs aux statistiques des joueurs. Donc, disons que l'équipe a deux matchs de ligue, puis un match de coupe. Je dois faire ces appels:
p.playLeagueGame()
p.playLeagueGame()
p.playCupGame()
Il est évident que lorsque le deuxième et le troisième appels sont effectués, les statistiques modifiées précédemment du joueur doivent être remis à zéro. Pour cela, je peux soit écrire une méthode de réinitialisation qui remet toutes les variables à 0, ou copier l'objet pour chaque appel que je fais. Ou faire quelque chose de complètement différent.
Voilà où ma question se pose, quelle est la meilleure approche, python et oop sage?
MISE À JOUR: Je suis suspect que j'ai super-compliqué cela et je peux facilement résoudre mon problème en utilisant des variables locales dans les fonctions. Cependant, que se passe-t-il si j'ai une fonction à l'intérieur d'une autre fonction, puis-je utiliser les locaux de l'extérieur à l'intérieur de l'intérieur?
Pouvez-vous expliquer votre intention, le comportement souhaité? Est-ce la méthode de chaînage, comme dans jQuery? –
Peut-être qu'un pseudocode aiderait à expliquer pourquoi il est nécessaire de changer les variables d'objet mais de les changer à la fin de la fonction, plutôt que d'utiliser simplement des variables locales. – tkerwin
J'ai lu ceci plusieurs fois et je ne suis toujours pas sûr de savoir quand une méthode voudra voir les valeurs des membres mises à jour et quand elle ne le sera pas. Cela semble avoir besoin d'un agent, d'une façade ou d'un modèle MVC. –