Jython特殊属性一览
Jython 类提供了对几个特殊属性的支持。下面列出最重要的几个:
名字 作用 注释
__dict__ 对象的可写属性 可以用于内省对象的属性
__class__ 对象的类 访问对象的类(类似于 Java 代码中的x.getClass() )
__bases__ 对象的立即父类的元组 可以用于内省对象的父类
Jython特殊属性——改变现有实例的类
与大多数其他语言不同,在 Jython 中可以改变现有实例的类。这会将可以使用的实例方法改变为新类的方法,但是不会改变所有预先存在的字段。例如,要改变一个实例的类,将新类赋值给特殊属性 __class__ ,如下所示:
- x = SomeClass()
- print isinstance(x, SomeClass) # prints: 1 (true)
- print isinstance(x, SomeOtherClass) # prints: 0 (false)
- :
- # change the class (that is, the type) of the instance here
- x.__class__ = SomeOtherClass
- print isinstance(x, SomeClass) # prints: 0 (false)
- print isinstance(x, SomeOtherClass) # prints: 1 (true)
- y = SomeOtherClass()
- print x.__class__ == y.__class__ # prints: 1 (true)
这样改变之后,x 实例将支持 SomeOtherClass 的方法,而不是以前的 SomeClass 的方法。在改变对象的类时,要注意实例应具有对新类正确的属性。
Jython特殊属性——其他内省函数
特殊属性中描述的属性允许对类进行更多内省。特别是,可以用 __dict__ 属性确定类中的方法和实例中的字段。
除了 dir 和 vars,Jython 还提供了其他的用于内省类和实例的函数,如下所示:
函数 注释
hasattr(obj, name) 测试指定的属性是否存在
getattr(obj, name{,default}) 如果属性存在,得到属性的名字,否则返回默认值(如果没有默认值,则抛出一个异常)
setattr(obj, name, value) 设置指定属性的值
delattr(obj, name) 删除指定的属性
【编辑推荐】