2012-07-04 46 views
5

正在初始化的Foo對象並運行的方法FUNC()在Python類屬性,但self.a的值被設置爲無呢。無法設置使用方法

我怎樣可以得到下面的代碼工作?

#!/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" 
3

jterrace是正確的。發生的事情是,func()方法首先打印,而不是init方法。考慮此方案:

​​

這是非常相似,你除了我加__init__:func:__main__:到相應的功能的打印報表。運行這個,你應該更好地理解發生了什麼。