如何在Python中访问初始值设定项中的类变量?
我认为Python中的class语句会创建一个作用域。但尝试这段简单的代码时,我会遇到一个错误:如何在Python中访问初始值设定项中的类变量?,python,scope,python-2.x,Python,Scope,Python 2.x,我认为Python中的class语句会创建一个作用域。但尝试这段简单的代码时,我会遇到一个错误: class A(): foo = 1 def __init__(self): print foo a = A() NameError: global name 'foo' is not defined 为什么不能从初始值设定项访问foo?访问它的正确方法是什么?类不创建作用域。这记录在: 类作用域中的名称不可访问。名称在中解析 最里面的封闭函数作用域。如果
class A():
foo = 1
def __init__(self):
print foo
a = A()
NameError: global name 'foo' is not defined
为什么不能从初始值设定项访问foo?访问它的正确方法是什么?类不创建作用域。这记录在:
类作用域中的名称不可访问。名称在中解析
最里面的封闭函数作用域。如果一个类定义
在嵌套作用域链中发生时,解析过程将跳过
类定义
以及在:
然后,使用新创建的本地名称空间和原始全局名称空间,在新的执行框架中执行该类的套件。通常,套件只包含函数定义。当类的套件完成执行时,其执行框架将被丢弃,但其本地命名空间将被保存。然后使用基类的继承列表和属性字典保存的本地名称空间创建类对象
重点矿山;执行框架是一个临时作用域
要访问foo,请使用self.foo:
或按名称访问A类,或使用typeself访问当前类,该类可以是子类:
def __init__(self):
print A.foo
或
类不创建作用域。这记录在:
类作用域中的名称不可访问。名称在中解析
最里面的封闭函数作用域。如果一个类定义
在嵌套作用域链中发生时,解析过程将跳过
类定义
以及在:
然后,使用新创建的本地名称空间和原始全局名称空间,在新的执行框架中执行该类的套件。通常,套件只包含函数定义。当类的套件完成执行时,其执行框架将被丢弃,但其本地命名空间将被保存。然后使用基类的继承列表和属性字典保存的本地名称空间创建类对象
重点矿山;执行框架是一个临时作用域
要访问foo,请使用self.foo:
或按名称访问A类,或使用typeself访问当前类,该类可以是子类:
def __init__(self):
print A.foo
或
def __init__(self):
print type(self).foo