Jython特殊屬性介紹
Jython特殊屬性一覽
Jython 類提供了對幾個特殊屬性的支持。下面列出最重要的幾個:
名字 作用 注釋
__dict__ 對象的可寫屬性 可以用于內(nèi)省對象的屬性
__class__ 對象的類 訪問對象的類(類似于 Java 代碼中的x.getClass() )
__bases__ 對象的立即父類的元組 可以用于內(nèi)省對象的父類
Jython特殊屬性——改變現(xiàn)有實例的類
與大多數(shù)其他語言不同,在 Jython 中可以改變現(xiàn)有實例的類。這會將可以使用的實例方法改變?yōu)樾骂惖姆椒ǎ遣粫淖兯蓄A先存在的字段。例如,要改變一個實例的類,將新類賦值給特殊屬性 __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特殊屬性——其他內(nèi)省函數(shù)
特殊屬性中描述的屬性允許對類進行更多內(nèi)省。特別是,可以用 __dict__ 屬性確定類中的方法和實例中的字段。
除了 dir 和 vars,Jython 還提供了其他的用于內(nèi)省類和實例的函數(shù),如下所示:
函數(shù) 注釋
hasattr(obj, name) 測試指定的屬性是否存在
getattr(obj, name{,default}) 如果屬性存在,得到屬性的名字,否則返回默認值(如果沒有默認值,則拋出一個異常)
setattr(obj, name, value) 設置指定屬性的值
delattr(obj, name) 刪除指定的屬性
【編輯推薦】