我对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
答案 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