gpt4 book ai didi

python - Python 3.6.0 中类内的方法是非本地的

转载 作者:行者123 更新时间:2023-12-01 03:15:41 25 4
gpt4 key购买 nike

我已经搜索过了,但没有找到任何东西。在 Python documentation 9.2.1给出了一个使用函数 scope_test() 的示例。

def scope_test():
def do_local():
spam = "local spam"

def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"

def do_global():
global spam
spam = "global spam"

spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)

scope_test()
print("In global scope:", spam)

当我将其更改为 class 并运行它时,我得到:

SyntaxError: no binding for nonlocal 'spam' found

我认为'nonlocal'不适用于类内的方法,但它只适用于查找函数内的函数。我在网上找到的所有答案都是针对函数的,而不是针对类的。

  • 为什么非本地不适用于类?
  • 有办法解决吗?

最佳答案

nonlocal 当然适用于类内的方法,您只需将函数嵌套在方法中(我在这里使用静态方法):

class Foo:
@staticmethod
def scope_test():
def do_local():
spam = "local spam"

def do_nonlocal():
nonlocal spam
spam = "nonlocal spam"

def do_global():
global spam
spam = "global spam"

spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)

Foo.scope_test()
print("In global scope:", spam)

使 scope_test 成为一个类并不会引入 nonlocal 工作所需的嵌套。您仍然需要嵌套。

关于python - Python 3.6.0 中类内的方法是非本地的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42473685/

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