类内嵌套函数内的 Python 作用域?

标签 python

如何从一个函数内部设置一个类变量到另一个函数中?

变量.py

class A:
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
    def seta(self):
        def afunction():
            self.a = 4
        afunction()
    def geta(self):
        return self.a

运行.py

cA = A()
print cA.a
cA.seta()
print cA.a
print cA.geta()

python 运行.py

1
1
1

为什么 a 不等于 4,我怎样才能使它等于 4?

编辑:

谢谢大家 - 抱歉,我现在才看到。我不小心被我名字中的一个 _ 误导了……所以我的范围实际上没问题。

最佳答案

问题是有多个 self 变量。传递给内部函数的参数会覆盖外部函数的范围。

您可以通过从内部函数中删除 self 参数并确保以某种方式调用该函数来解决这个问题。

class A:
    def __init__(self):
        self.a = 1
        self.b = 2
        self.c = 3
    def seta(self):
        def afunction():  # no self here
            self.a = 4
        afunction()       # have to call the function
    def geta(self):
        return self.a

关于类内嵌套函数内的 Python 作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14368297/

相关文章:

python - 如何使用 A 列和 B 列使用 DF2 中的值在 DF1 上创建 C 列

python - 如何在 Python 中使用 BLE 通知

Python HTTP 调试器

python - Archlinux pip 和 setuptools 未升级

python - 如何在 scikit-learn 中有效地编码数字目标变量?

python - celery 即使允许也不会接受 pickle

python - Shopify API : How do I send customer an email about product being shipped?

python - 如何在 Django 表单中使用外键过滤选择值

python - 从日期时间列表中获取最早和最晚时间

python - Django 中的单元测试。注入(inject)测试用例的静态变量