栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

UnboundLocalError:分配前引用了局部变量,为什么在这种情况下不应用LEGB规则

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

UnboundLocalError:分配前引用了局部变量,为什么在这种情况下不应用LEGB规则

这似乎很奇怪(确实如此),但是 您并没有结束

class
,只是结束了
def
。该“ ê 以L简称nclosing”范围 ê
GB只是说说函数定义; 类块在这里不算在内。

这种奇怪的行为是历史上将类添加到Python的方式的产物。类范围不是实际范围。Python并不总是具有类,而怪异的“中间作用域”仅在类定义期间存在:在内部,类主体下的代码或多或少地只是

exec
在临时作用域下运行,并将结果分配给类名。当时,这是一种非常简单的“螺栓连接”方法,可将OOP纳入该语言,这也是Python之所以将明确的
self
东西作为有意的语言设计选择的原因。

要从

a_var
方法内部从“类范围”访问,您将必须通过
self.a_var
或使用属性访问
Test.a_var
。两者都应该起作用。您也可以在类定义期间在类级别直接访问它,但是由于您仍在临时范围内,这只是本地访问的另一个示例(
L EGB)。

在执行模型部分中对此进行了记录(尽管不是特别清楚)。

在名称解析的上下文中,exec()和eval()的类定义块和参数是特殊的。类定义是可以使用和定义名称的可执行语句。这些引用遵循通常的名称解析规则,但在全局命名空间中查找未绑定的局部变量。类定义的名称空间成为该类的属性字典。
在一个类块中定义的名称范围限于该类块 ; 它没有扩展到方法的代码块–这包括理解和生成器表达式,因为它们是使用函数范围实现的。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/668521.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号