創建Jython類的過程探討
創建Jython類與創建全局函數一樣容易。清單 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 構造函數)。它總是命名為 __init__ ,而且每當創建該類的新實例時就調用它。在 Jython 中,將正被調用(或在初始化程序的情況中,被創建)的當前實例顯式聲明為參數。傳統上這個參數稱為 self 。
在 Dog 初始化程序中, bark_text 參數是一個字符串,通過使用 self 將它存儲為實例變量。在調用方法 bark() 時不采用任何顯式參數,但仍須指定 self 。
方法 annoy_neighbors 確實采用了一個顯式參數,它是除了 self 之外指定的另一個參數,并且它是狗為了煩擾鄰居而叫嚷的次數。請注意代碼運行時很容易進入深度嵌套,因此要進行縮進。在該類定義的方法 annoy_neighbors 定義內有一個循環塊。以 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類這樣簡單就創建了。
【編輯推薦】