Jython高级类特性深度解析
1. 特殊属性概述
在Jython类中,以双下划线开头和结尾的特殊属性十分丰富,它们是创建具有复杂行为的高度定制化对象的主要手段。使用这些特殊属性并不意味着操作困难或仅适用于Python高手,相反,为类添加特殊属性是应对复杂性的有效方式。例如,通过几个特殊方法就能让对象表现得像列表,或者拦截属性访问,同时在设计、可重用性和灵活性方面获得巨大收益。
1.1 预定义类属性
类和实例隐式地具有某些特殊属性,这些属性在类定义执行或实例创建时自动出现。Jython会包装Java类和实例,使其也具有特殊属性。Jython类有五个特殊属性,而Java类有其中三个。需要注意的是,这些属性都是可读的,但只有部分允许赋值。
为了进一步研究这些特殊属性,我们先定义一个简单的Jython类 LineDatum
:
# file: datum.py
import java
class LineDatum(java.util.Hashtable):
"""Collects points that lie on a line.
Instantiate with line slope and intercept: e.g. LineDatum(.5, 3)"""
def __init__(self, slope, incpt):
self.slope = slope
self.incpt = incpt
def addPoint(self, x, y):