首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继续从类变量中获取NameError?

继续从类变量中获取NameError?
EN

Stack Overflow用户
提问于 2020-08-27 06:23:55
回答 4查看 80关注 0票数 0

因此,我试图通过创建一个类来全面理解Python,但是我对这个错误感到非常困惑。还在学习,所以请试着了解我的初学者在这里的情况。

代码语言:javascript
复制
  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())

输出:

代码语言:javascript
复制
What would you like to do?

当我第一次输入Deposit,然后是Withdraw,然后是 Balance时,代码运行得非常好。

但是,当我首先输入Balance时,会得到以下错误:

代码语言:javascript
复制
return self.principle + self.returns + deposit_amount - withdraw_amount
NameError: name 'deposit_amount' is not defined

有什么帮助吗伙计们?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2020-08-27 06:31:45

在调用global deposit_amount方法时,首先声明deposit(self)。该语句将变量放置在全局范围内。在调用deposit(self)之前,变量从未定义过,无论是在balance(self)的本地函数范围中还是在全局范围中。因此,您将得到此错误。这与OOP python一开始没有任何关系,但只是一个范围问题。要以面向对象的方式执行此操作,我建议您将变量作为类实例成员:

代码语言:javascript
复制
def __init__(self, name, principle, returns):
    self.name = name
    self.principle = principle
    self.returns = returns
    self.deposit_amount = 0
    self.withdraw_amount = 0
票数 1
EN

Stack Overflow用户

发布于 2020-08-27 06:28:25

当您首先输入Balance时,deposit_amountwithdraw_amount都不会被定义,这两者都是balance定义中的if语句所需要的。

票数 0
EN

Stack Overflow用户

发布于 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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63610284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档