AttributeError:“函数”对象没有属性<variable>

时间:2019-05-21 10:29:47

标签: python

我需要访问全局变量(g)。它存在于类中的另一个python文件中。请建议我如何访问。

test1.py:

class cls():
    def m1(self):
       inVar = 'inside_method'
       global g
       g = "Global"
       x = 10
       y = 20
       print("Inside_method", inVar)
       print (x)
       print (y)
       print (g)
obj = cls()
obj.m1()

test2.py:

from test1 import *
print (cls.m1) # I can access all variables in method
print (cls.m1.g) # getting error while accessing variable inside the function

我希望从我的test2.py访问变量'g'。你能帮我一下吗?

1 个答案:

答案 0 :(得分:2)

全局变量是 module 的属性,而不是c1类或m1方法的属性。因此,如果您导入模块而不是导入模块中的所有名称,则可以在其中访问它:

import test1

# references the `m1` attribute of the `cls` name in he `test1` module
# global namespace.
print(test1.cls.m1)
# references the `g` name in he `test1` module global namespace.
print(test1.g)

您还需要在cls().m1()模块的顶层运行test1表达式,因此它会在任何东西首次导入test1时执行。这意味着您的from test1 import *表达式也在您的g命名空间中创建了一个名称test2

from test1 import *  # imported cls, obj and g

print(g)  # "Global"

但是,该引用不会随对test1.g全局变量的任何分配而改变。