2012-08-16 56 views
15
class Num: 
    def __init__(self,num): 
     self.n = num 

我讀了__init__方法返回None。當我執行a=Num(5)Num(5)將調用class.But的__init__方法,如果__init__返回None然後a應該nothing.But引用,而不是a正在引用Num類的對象。它是如何發生的?__init__也是返回None還是類的對象?什麼在Python __init__方法的返回

回答

34

__init__()返回None。它是__new__(),它返回新的實例。

+6

+1(正確)看起來你的困惑源於'__init __()'是實例化對象時唯一調用的方法; 'a = Num(5)'與'a = Num .__ init __(5)'不一樣(注意第二個不起作用)。 – 2012-08-16 05:54:58

+1

+1 for __init __()不是唯一稱爲的方法.Thnx @MatthewAdams – tez 2012-08-16 06:10:16

1

當執行a = Num(5)時,您確實創建了該對象並返回了新創建的對象。但它不像創建對象時直接調用__init__那麼容易。 __init__作爲啓動過程的一部分被後臺中的一些Python魔術所調用。基本上這個魔術就是其中的一部分。但是,只有極少數情況下,您想要撥打__new__。你應該這樣做,如果你真的知道你在做什麼,並且真的沒有更簡單的方法來實現你的目標。