初始化Foo对象确实运行方法func(),但无论如何,self.a的值都设置为None。
如何使以下代码生效?
#!/usr/bin/env python
class Foo(object):
def __init__(self, num):
self.a = self.func(num)
print self.a
def func(self, num):
self.a = range(num)
print self.a
def __str__(self):
return str(self.a)
def main():
f = Foo(20)
print f
if __name__ == "__main__":
main()
输出结果为:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
None
None
答案 0 :(得分:9)
您正在将self.a
重置为该函数的返回值。由于该函数不返回任何内容,因此该值设置为None
。
def __init__(self, num):
self.a = self.func(num) # return value of function is None
print self.a # self.a is now None
def func(self, num):
self.a = range(num) # sets self.a to [0..19]
print self.a # prints [0..19]
# implicit "return None"
答案 1 :(得分:3)
jterrace是对的。发生的是func()方法首先打印,而不是 init 方法。考虑一下这个程序:
#!/usr/bin/env python
class Foo(object):
def __init__(self, num):
self.a = self.func(num)
print '__init__:', self.a
def func(self, num):
self.a = range(num)
print 'func:', self.a
def __str__(self):
return str(self.a)
if __name__ == '__main__':
f = Foo(20)
print '__main__:', f
除了我将__init__:
,func:
和__main__:
添加到相应功能的打印语句之外,它与您的非常相似。运行这个,您应该更好地了解正在发生的事情。