2013-07-01 34 views
1

我是一個新的Python程序學習者,並且我將它創建爲下面的類實例時感到困惑,它們有什麼不同?這兩種方法對新的python類實例有什麼區別

類聲明:

class TestClass: 

    def __init__(self, one=10, two=20, three=30): 
     self.one = one 
     self.two = two 
     self.three = three 

1日。 (撥錯)

x = TestClass 
print x 
print x(50) 
print x.one, x.two 

輸出:

__main__.TestClass 
<__main__.TestClass instance at 0x0000000002445208> 
Traceback (most recent call last): 
    File "D:\workspace-QATool_vNext\testStudyCode\test\StudyCode.py", line 27, in <module> 
    print x.one, x.two 
AttributeError: class TestClass has no attribute 'one' 

第二。 (更正)

y = TestClass() 
print y 
print y.one, y.two 

輸出:

<__main__.TestClass instance at 0x00000000023B5208> 
10 20 

回答

0

在你的第一個例子,你只是在類複製到x。根本沒有創建實例,因此構造函數不能運行。 print x(50)是什麼使這個類的一個實例,因爲你實際上正在調用這個類。但是你沒有把它存儲在任何地方,所以它是毫無意義的。

在第二個,要創建一個實例(注意:TestClass後paretheses),從而訪問變量的工作,你已經發現

4

第一個給你一個指向類對象(是的,這些也是對象),第二個是對象的實例。 __init__僅在您創建對象的新實例時纔會調用。這是課後做的():創建一個新實例。

你可以做像這樣讓你的第一個例子的工作:

x = TestClass #'x' points to class object 
print x 
z = x(50) #'x' still points to class object but 'z' points to new instance 
print z 
print z.one, z.two #and 'z' is now usable as a new instance 
print x.one #where 'x' still points to the class object that does not know 'one' since it hasn't run '__init__' 

的問題是,X還指出,新創建的實例的類對象這一翻譯。

+0

非常感謝,我現在明白了,並更新了我的代碼,它的工作原理: – user2538491

+0

不客氣。也許這個[page](http://docs.python.org/2/tutorial/classes.html)也是有用的。 – RickyA

+0

非常感謝。 – user2538491

0

您創建和使用TestClass對象的兩次嘗試之間存在非常細微的差異。

x = TestClass 

這將類TestClass複製到x。

y = TestClass() 

這將創建一個testclass實例並將其指定給y。

y = x() 

通過將testclass複製到x,x包含完全相同的類,因此也可以用來啓動類testclass的對象。

1

的功能INIT是在類的構造函數,它不叫,直到您使用以下了Syntex:

y = TestClass() 

隨着該識別TestClass(即Y)的對象具有的所有屬性。

+0

非常感謝。 – user2538491

相關問題