首页 > 解决方案 > 继续从类变量中获取 NameError?

问题描述

所以我试图通过创建一个类来完全理解 Python OOP,但我对我不断遇到的这个错误感到非常困惑。仍在学习,所以请尝试在这里了解我的初学者情况。

  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
 

任何帮助,伙计们?

标签: pythonfunctionclassmethods

解决方案


调用方法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

推荐阅读