创建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类这样简单就创建了。
【编辑推荐】