創(chuàng)建Jython類的過程探討
創(chuàng)建Jython類與創(chuàng)建全局函數(shù)一樣容易。清單 13 提供了一個示例:
清單 13. 用戶定義的Jython類的簡單示例(保存在名為 listing13.py 的文件中)
- class Dog:
- def __init__(self, bark_text):
- self.bark_text = bark_text
- return
- def bark(self):
- print self.bark_text
- return
- def annoy_neighbors(self, degree):
- for i in range(degree):
- print self.bark_text
- return
- print "Fido is born"
- fido = Dog("Bow wow")
- print "Let's hear from Fido"
- fido.bark()
- print "Time to annoy the neighbors"
- fido.annoy_neighbors(5)
上述代碼中,第一行命名該Jython類,其定義完全是一個大的代碼塊。
定義的第一個方法是特殊的 初始化程序(類似于 Java 構(gòu)造函數(shù))。它總是命名為 __init__ ,而且每當創(chuàng)建該類的新實例時就調(diào)用它。在 Jython 中,將正被調(diào)用(或在初始化程序的情況中,被創(chuàng)建)的當前實例顯式聲明為參數(shù)。傳統(tǒng)上這個參數(shù)稱為 self 。
在 Dog 初始化程序中, bark_text 參數(shù)是一個字符串,通過使用 self 將它存儲為實例變量。在調(diào)用方法 bark() 時不采用任何顯式參數(shù),但仍須指定 self 。
方法 annoy_neighbors 確實采用了一個顯式參數(shù),它是除了 self 之外指定的另一個參數(shù),并且它是狗為了煩擾鄰居而叫嚷的次數(shù)。請注意代碼運行時很容易進入深度嵌套,因此要進行縮進。在該類定義的方法 annoy_neighbors 定義內(nèi)有一個循環(huán)塊。以 print "Fido is born" 開始的代碼再次演示了該類。清單 13 的輸出類似如下:
清單 14. 清單 13 的輸出
- $ jython listing13.py
- Fido is born
- Let's hear from Fido
- Bow wow
- Time to annoy the neighbors
- Bow wow
- Bow wow
- Bow wow
- Bow wow
- Bow wow
Jython類這樣簡單就創(chuàng)建了。
【編輯推薦】