上文中定義了一個包含一個構造方法和四個實例屬性的類MyLine。對于Python中的類,還有其他相關的概念需要我們了解。
Python中實例屬性包含實例變量和實例方法。
1.實例變量的定義
作為動態(tài)語言,Python中的類不要求預先定義實例變量,實例變量賦值即視為定義,你也可以在類的其他普通方法中定義和使用實例變量。請看如下交互式環(huán)境下運行的代碼:
>>> class Foo:
def__init__(self,x):
self.x= x
deftesta(self,y):
self.y= y
defgetxy(self):
print(self.x,self.y)
>>> f = Foo(3)
>>> f.getxy()
Traceback (most recent call last):
File"", line 1, in
f.getxy()
File"", line 9, in getxy
print(self.x,self.y)
AttributeError: 'Foo' object has noattribute 'y'
>>> f.testa(9)
>>> f.getxy()
3 9
第一次調用f.getxy()時,試圖使用實例變量y,Python給出的錯誤信息很明確,此時,F(xiàn)oo對象的實例f還不具有實例變量y。當執(zhí)行完f.testa(9)時,實際上就是運行了方法中的語句self.y = 9,這時,通過賦值即定義的形式使f這個實例具有了y這個實例變量。所以,再次調用f.getxy()時,成功地輸出了x和y的屬性值。
一般情況下,實例變量盡量在類的構造方法中定義和賦值,如果能保證其實例變量是在使用前被定義和賦值,則也可以在一般方法中定義實例變量,實現(xiàn)的方法可以是在構造方法中調用定義實例變量的一般方法一次。
2.實例方法的定義
通過上文中的代碼,也可以看出一般實例方法的定義和構造方法定義形式是類似的,只不過方法名稱不使用雙下劃線了。
一般方法的定義時,第一個參數(shù)也是self,用于對實例自身的引用,其他參數(shù)可以和面向過程的函數(shù)一樣,由用戶根據(jù)實際需求定義。但需要說明的是,在使用類實例去調用普通的實例方法時,self這個參數(shù)是不用提供的,由Python自動傳入。