【问题标题】:Accessing a Global Variable in an External Class访问外部类中的全局变量
【发布时间】:2012-12-27 20:46:21
【问题描述】:

我已经学习 Python 大约一个星期了,在我的代码变得相当大而且有点混乱之后,我决定将它分解成单独的类文件等,但我遇到了一点问题。

我已经尝试在 SO 上使用谷歌搜索和搜索,但我找不到我的具体问题,如果之前有人问过,请原谅我。

考虑 2 个文件。 test.py 和 testClass.py 我在 test.py 中有一个全局变量,它也将在 test.py 中设置,但我想在 testClass.py 的函数中访问该变量。这里有一些代码可以帮助解释。

test.py 看起来像这样:

import testClass

dict = {}
z = 5

dict['test'] = testClass.testClass(1, 3)

print dict['test'].sum()

testClass.py 看起来像这样:

class testClass:
    def __init__(self, x, y):
        self.foo = x
        self.bar = y

    def sum(self):
        global z
        return self.foo + self.bar + z

目前解释器正在吐槽:

NameError: global name 'z' is not defined

在重新阅读了关于类和变量范围的 Python 参考资料后,我认为我已经掌握了它,但显然没有。

这一切的结果只是能够遍历对象实例的字典并运行包含在外部类中的一系列各种检查函数等。

【问题讨论】:

    标签: python global-variables scope python-2.6


    【解决方案1】:

    全局对于文件(模块)来说是全局的,因此您可能希望将它包含在一个类中。

    【讨论】:

    • 我想我可能只需要将它传递给实例,但我更想知道这是否可能是我最初的想法。
    【解决方案2】:

    我不确定如果你在方法中声明 global 是否会起作用,因为从技术上讲,它是一个本地命名空间。尝试将其放在主要和总和之外。

    【讨论】:

    • 完整答案有点不完整,请提供一些代码或文档来满足您的建议! :)
    【解决方案3】:

    需要在任何会改变它们的函数中定义全局变量。

    我认为您还需要在 test.py 中将“z”定义为全局变量:

    import testClass
    
    dict = {}
    global z = 5
    
    dict['test'] = testClass.testClass(1, 3)
    
    print dict['test'].sum()
    

    【讨论】:

    • 错误答案,全局变量不能那样工作,它们只能在模块级别通过变量名访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2021-05-17
    相关资源
    最近更新 更多