因此,我试图通过创建一个类来全面理解Python,但是我对这个错误感到非常困惑。还在学习,所以请试着了解我的初学者在这里的情况。
class Investor:
def __init__(self, name, principle, returns):
self.name = name
self.principle = principle
self.returns = returns
def info(self):
return '{} {}'.format(self.name, self.principle)
def deposit(self):
global deposit_amount
deposit_amount = float(input('Amount: '))
return deposit_amount + self.principle + self.returns
def withdraw(self):
global withdraw_amount
withdraw_amount = float(input('Withdraw amount: '))
return self.principle + self.returns + deposit_amount - withdraw_amount
def balance(self):
if deposit_amount > 0 or withdraw_amount > 0:
return self.principle + self.returns + deposit_amount - withdraw_amount
else:
return self.principle + self.returns
investor1 = Investor('John', 5000, 0)
while True:
prompt = input('What would you like to do?\n')
if prompt == 'Balance':
try:
print(investor1.balance())
except ValueError:
print(investor1.info())
elif prompt == 'Deposit':
print(investor1.deposit())
elif prompt == 'Withdraw':
print(investor1.withdraw())输出:
What would you like to do?当我第一次输入Deposit,然后是Withdraw和,然后是 Balance时,代码运行得非常好。
但是,当我首先输入Balance时,会得到以下错误:
return self.principle + self.returns + deposit_amount - withdraw_amount
NameError: name 'deposit_amount' is not defined有什么帮助吗伙计们?
发布于 2020-08-27 06:31:45
在调用global deposit_amount方法时,首先声明deposit(self)。该语句将变量放置在全局范围内。在调用deposit(self)之前,变量从未定义过,无论是在balance(self)的本地函数范围中还是在全局范围中。因此,您将得到此错误。这与OOP python一开始没有任何关系,但只是一个范围问题。要以面向对象的方式执行此操作,我建议您将变量作为类实例成员:
def __init__(self, name, principle, returns):
self.name = name
self.principle = principle
self.returns = returns
self.deposit_amount = 0
self.withdraw_amount = 0发布于 2020-08-27 06:28:25
当您首先输入Balance时,deposit_amount和withdraw_amount都不会被定义,这两者都是balance定义中的if语句所需要的。
发布于 2020-08-27 06:29:18
"deposit_amount“是函数存储的局部变量。所以除非你负责押金fn。首先,就系统而言,根本不存在。因此,尝试并初始化相同的全局。如果要阅读局部变量和全局变量,请参阅:https://www.tutorialspoint.com/global-and-local-variables-in-python#:~:text=There%20are%20two%20types%20of,function%20where%20it%20is%20defined。
https://stackoverflow.com/questions/63610284
复制相似问题