Python:变量范围和“实例没有属性”

时间:2018-02-06 04:13:08

标签: python scope

我对python中的实例和类变量感到困惑。我对这段代码感到困惑:

class A:
    def _init__(self):
        print "initializer called"
        #l is an instance variable
        self.l = []
        print len(l)
    def printList(self):
        print len(self.l)

a = A()
print "here"
a.printList()

产生以下输出:

here
Traceback (most recent call last):
  File "C:\Python27\a.py", line 16, in <module>
    a.printList()
  File "C:\Python27\a.py", line 10, in printList
    print len(self.l)
AttributeError: A instance has no attribute 'l'

初始化程序是否未被调用?为什么“在这里”打印,但初始化程序中的print语句没有?应该'我'是一个类变量?我认为使用'self'将其设为实例变量就足够了,这是不正确的?我对这些变量的范围不正确吗?

我看过这些来源,但他们没有帮助:

Python: instance has no attribute

Python: Difference between class and instance attributes

Python - Access class variable from instance

Python Variable Scope and Classes instance has no attribute

1 个答案:

答案 0 :(得分:3)

您定义了一个名为_init__的方法,而不是__init__。下划线的数量很重要。如果没有完全正确的名称,它只是一个奇怪命名的方法,而不是实例初始化器。您最终使用默认初始值设定项(不设置任何属性)。您的_init__也有误(您引用l不合格)。修复这两个,你的初始化程序将是:

def __init__(self):    # <-- Fix name
    print "initializer called"
    #l is an instance variable
    self.l = []
    print len(self.l)  # <-- Use self.l; no local attribute named l