min*_*leg 5 python scope namespaces python-2.7 python-3.x
出于某些原因,当出现这样的情况时,python从全局命名空间中获取变量:
class Cls:
foo = foo
Run Code Online (Sandbox Code Playgroud)
请看这段代码:
foo = 'global'
def func0():
foo = 'local'
class Cls:
bar = foo
print('func0', Cls.bar)
func0()
# func0 local
def func1():
foo = 'local'
class Cls:
foo = foo
print('func1', Cls.foo)
func1()
# func1 global
def func2():
foo = 'nonlocal'
def internal():
class Cls:
foo = foo
print('func2.internal', Cls.foo)
internal()
func2()
# func2.internal global
def func3():
foo = 'local'
class Cls:
bar = foo
foo = foo
print('func3', Cls.bar, Cls.foo)
func3()
# func3 global global
Run Code Online (Sandbox Code Playgroud)
按照PEP 227
类定义是可执行语句,可以包含名称的用法和定义.这些引用遵循名称解析的常规规则.类定义的名称空间成为类的属性字典.
但对我来说,它看起来并不像"遵循正常规则".我错过了什么?
Py2和Py3都以这种方式运行.
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |