Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么从创建新对象的另一个程序执行函数,然后访问它会返回错误_Python_Class - Fatal编程技术网

Python 为什么从创建新对象的另一个程序执行函数,然后访问它会返回错误

Python 为什么从创建新对象的另一个程序执行函数,然后访问它会返回错误,python,class,Python,Class,我试图创建一个函数,该函数每次调用exec时都会创建一个类的新对象,但我无法访问该对象 下面是一段示例代码: a、 py: b、 py: 运行b.py时,它返回以下内容: 回溯(最近一次呼叫最后一次): 文件“C:\Users\lenovo\Desktop\pythontest\b.py”,第3行,在 打印(a.aaa.var) AttributeError:模块“a”没有属性“aaa” 为什么会这样?我看了Take\u Care\u的评论,然后测试了它。如果我在将aaa分配给测试对象之前将其全

我试图创建一个函数,该函数每次调用exec时都会创建一个类的新对象,但我无法访问该对象

下面是一段示例代码:

a、 py:

b、 py:

运行b.py时,它返回以下内容:

回溯(最近一次呼叫最后一次): 文件“C:\Users\lenovo\Desktop\pythontest\b.py”,第3行,在 打印(a.aaa.var) AttributeError:模块“a”没有属性“aaa”


为什么会这样?

我看了Take\u Care\u的评论,然后测试了它。如果我在将aaa分配给测试对象之前将其全球化,我可以从b.py访问它。

testfunc()是在测试类内还是在类外?它在类定义外。执行上下文是什么意思?你的意思是存在范围问题,存在b.aaa.var,但不存在a.aaa.var?或者这是否意味着只能从函数范围内访问对象?@Take\u Care\u我不知道你所说的“执行上下文”是什么意思,但你的评论的其他所有内容都是不正确的。这与模块和导入无关。这很简单,
aaa
是一个局部变量,而不是一个全局变量。
aaa=test()
创建一个局部变量。如果要从另一个模块以
a.aaa
的形式访问该变量,必须将其设置为全局变量。如果您没有使用
exec
,这将是一个明显的错误,因此请记住
exec
对代码的可读性是1)危险的,2)有害的。有更好的方法来定义全局变量。
class test(object):
    def __init__(self):
        self.var='vari'
def testfunc():
    exec("""aaa=test()
aaa.var='varia'""")
import a
a.testfunc()
print(a.aaa.var)