Can';t使用方法在python中设置类属性
初始化Foo对象确实会运行func()方法,但self.a的值无论如何都会设置为None 如何使以下代码正常工作Can';t使用方法在python中设置类属性,python,class,attributes,Python,Class,Attributes,初始化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
#!/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
您正在将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"
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
它与您的非常相似,只是我在相应函数的打印语句中添加了
\uuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu:
、func:
和\uuuuuuuuuuuuuuuuuuuuuuuuuuuuu:
。运行此命令,您应该更好地了解发生了什么。您没有任何类属性,只有实例属性。