gpt4 book ai didi

python - 如何用Python调用这个ATM机器游戏中的父类(super class)?

转载 作者:行者123 更新时间:2023-11-28 22:15:34 24 4
gpt4 key购买 nike

我正在尝试创建一个 ATM 游戏,该游戏使用 10 个帐户(从 0-9)的列表,并且所有帐户都设置为 100 开始。我在 main() 函数中根据需要设置了所有循环和菜单项,但我认为我的帐户类设置不正确,因为当我将参数传递给类函数时,我得到了错误。有没有办法让我在类里面启动一个空列表来开始?还是我在 main() 函数中犯了其他错误?

这是我在选择菜单项 1 以获得余额时遇到的错误:

  File "/Users/Beadog/PycharmProjects/M08_12.3/gameATMMachine.py", line 82, in getBalance
return format(self.__balance, ".2f")
AttributeError: 'int' object has no attribute '_Account__balance'

完整代码如下:

class Account:
def __init__(self, id = 0, balance = 100):
self.__id = id
self.__balance = balance

def getId(self):
return self.__id

def getBalance(self):
return format(self.__balance, ".2f")

def setID(self, id):
self.__id = id

def setBalance(self, balance):
self.__balance = balance

def withdrawal(self, withdrawalAmount):
if withdrawalAmount < self.__balance:
self.__balance -= withdrawalAmount
else:
print("Insuficient Funds.")

def deposit(self, depositAmount):
self.__balance += depositAmount


def main():
accounts = []
for i in range(10):
accounts.append(Account(i, 100))

while True:
id = eval(input("Enter account ID: "))

if id >= 0 and id <= 9:

print()
print("Main menu")
print("1: check balance")
print("2: withdraw")
print("3: deposit")
print("4: exit")
print()

menuChoice = eval(input("Enter a choice: "))
print()

while menuChoice != 4:
if menuChoice == 1:
balance = Account.getBalance(id)
print("The balance is ", balance)
print()
print("Main menu")
print("1: check balance")
print("2: withdraw")
print("3: deposit")
print("4: exit")
print()
menuChoice = eval(input("Enter a choice: "))
print()

elif menuChoice == 2:
withdrawalAmount = eval(input("Enter withdrawal amount: "))
Account.withdrawal(id, withdrawalAmount)
print()
print("Main menu")
print("1: check balance")
print("2: withdraw")
print("3: deposit")
print("4: exit")
print()
menuChoice = eval(input("Enter a choice: "))
print()
elif menuChoice == 3:
depositAmount = eval(input("Enter deposit amount: "))
Account.deposit(id, depositAmount)
print()
print("Main menu")
print("1: check balance")
print("2: withdraw")
print("3: deposit")
print("4: exit")
print()
menuChoice = eval(input("Enter a choice: "))
print()
else:
menuChoice = eval(input(("Please enter a valid menu choice (1-4): ")))
print()
else:
print("Account ID must be a number between 0 and 9. Please try again.")
print()

main()

最佳答案

简答:像这样改变行:

balance = Account.getBalance(id)

为此:

balance = accounts[id].getBalance()

长答案:

您似乎误解了 python 类的工作原理 - 什么是,什么是类的实例。让我纠正您的代码显示的其中一些误解。

  1. 使用 balance = Account.getBalance(id) 这样的行,您调用的是,而不是类的实例。您知道这一点是因为您使用的是 Account 这个词,它是类的名称,而不是一个包含 Account 实例的变量。事实上,在您的代码的前面,您创建了列表 accounts,其中包含 10 个 Account 实例 - 您应该在这些实例上调用该函数。换句话说,要在 accounts 列表中 Account 的第 id 实例上调用函数 getBalance() ,你会做 accounts[id].getBalance()
  2. self 参数是总是 隐含的。当您在类的实例上调用函数时——例如,accounts[id].getBalance(),您用来调用该函数的实例将作为第一个参数传递。在这种情况下,参数 self 将是 accounts[id]。请注意,您不需要因此将其放在括号中。
    • 如果您愿意,您也可以执行 Account.getBalance(accounts[id]),这会将 accounts[id] 作为 self 参数。

关于python - 如何用Python调用这个ATM机器游戏中的父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52798109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com