Метод класса, изменяющий все переменные этого класса Python - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь создать класс, а затем иметь категории, из которых я могу вносить и отказываться. Проблема, с которой я сталкиваюсь, заключается в том, что когда я, например, беру, например, food, и вызываю метод deposit, он также обновляется для объекта с именем «Clothing». Я уверен, что это простое исправление.

Результат для приведенного ниже кода:

[{'amount': 1000, 'description': 'Initial1'}, {'amount': 500, 'description': 'Initial2'}]
[{'amount': 1000, 'description': 'Initial1'}, {'amount': 500, 'description': 'Initial2'}]
Clothing Food

В то время как я хочу:

[{'amount': 1000, 'description': 'Initial1'}]
[{'amount': 500, 'description': 'Initial2'}]
Clothing Food

У кого-нибудь есть идеи ? Спасибо

class Category:
    ledger=list()
    runningBalance=int()
    name=""

    def __init__(self, name):
        self.name=name
    
    def deposit(self,amount,description):
        self.ledger.append({"amount":amount,"description":description})
        self.runningBalance=self.runningBalance+amount

Food=Category("Food")
Clothing=Category("Clothing")

Food.deposit(1000,"Initial1")
Clothing.deposit(500,"Initial2")

print(Food.ledger)
print(Clothing.ledger)

print(Clothing.name,Food.name)

1 Ответ

1 голос
/ 05 августа 2020

Сделать переменные класса объектными переменными.

class Category:

    def __init__(self, name):
        self.name=name
        self.ledger=list()
        self.runningBalance=int()
    
    def deposit(self,amount,description):
        self.ledger.append({"amount":amount,"description":description})
        self.runningBalance=self.runningBalance+amount

Food=Category("Food")
Clothing=Category("Clothing")

Food.deposit(1000,"Initial1")
Clothing.deposit(500,"Initial2")

print(Food.ledger)
print(Clothing.ledger)

print(Clothing.name,Food.name)

Вывод:

[{'amount': 1000, 'description': 'Initial1'}]
[{'amount': 500, 'description': 'Initial2'}]
Clothing Food
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...