«Питонический» способ «сбросить» переменные объекта?

(«переменные» здесь относятся к «именам», я думаю, не совсем уверен в определении, которое используют pythonistas)

У меня есть объект и несколько методов . Все эти методы требуют и все изменяют переменные объекта. Как я могу самым питоническим и лучшим образом, соблюдая методы ООП, добиться того, чтобы переменные объекта использовались методами, но при этом сохраняли их исходные значения для других методов?

Должен ли я копировать объект каждый раз метод называется? Следует ли мне сохранять исходные значения и использовать метод reset () для их сброса каждый раз, когда они нужны методу? Или есть еще лучший способ?

РЕДАКТИРОВАТЬ: Меня попросили ввести псевдокод. Поскольку меня больше интересует понимание концепции, а не просто конкретное решение проблемы, с которой я сталкиваюсь, я попытаюсь привести пример:

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

Выше приведен мой класс для объекта Player (например, предположим, что он баскетболист. ). У этого объекта есть три разных метода, каждый из которых присваивает значения статистике игроков.

Итак, предположим, что у команды есть две игры лиги, а затем кубковая игра. Мне пришлось бы сделать следующие вызовы:

p.playLeagueGame()
p.playLeagueGame()
p.playCupGame()

Очевидно, что при выполнении второго и третьего вызовов необходимо сбросить ранее измененную статистику игрока. Для этого я могу написать метод сброса, который устанавливает все переменные обратно в 0, или копировать объект для каждого моего вызова. Или сделайте что-нибудь совершенно другое.

Вот где мой вопрос, как лучше всего,

ОБНОВЛЕНИЕ: Я подозреваю, что я слишком усложнил это, и я могу легко решить свою проблему, используя локальные переменные в функциях. Однако что произойдет, если у меня есть функция внутри другой функции, могу ли я использовать локальные переменные внешнего элемента внутри внутреннего?

16
задан 1 February 2011 в 21:18
поделиться