科學計算三維可視化---Traits(Property屬性)
阿新 • • 發佈:2018-07-14
pri tro str 而是 light 一次 圖片 直接 獲得
Property屬性
使用Property函數為類創建Property屬性,Property屬性用法和一般屬性相同,但是他在獲取值和賦值時會調用相應的方法
traits庫也提供了Property屬性
from traits.api import Property
from traits.api import Property,HasTraits,Float,cached_property class rectangle(HasTraits): w = Float(1.0) h = Float(2.0) area = Property(depends_on=[‘w‘,‘h‘]) #當w,h任意一個發生改變時,都會觸發屬性函數 #當我們讀取area的時候,是當前_get_area方法的返回值,當我們設置area值時,會傳遞個人_set_area方法(不設置,則只是只讀的) @cached_property #返回值將會被緩存,除非w,h發生變化,否則就會一直使用這個緩存值,而不會多次調用_get_area值 def _get_area(self): #會根據屬性名直接獲得屬性對應的方法 print("computing...") return (self.w*self.h)
測試
>>> r = rectangle() >>> r.area #第一次獲取值的時候會去調用_get_area方法 computing... 2.0 >>> r.area #再去調用會直接去緩存中獲取 2.0 >>> r.area 2.0 >>> r.w = 5 #當我們修改w,或者h時,不會立即調用_get_area方法,會樹立一個更新標識符,當我們再次獲取area時,不會去緩存中獲取,而是再次調用_get_area方法 >>> r.area computing... 10.0
>>> r.edit_traits()
<traitsui.ui.UI object at 0x000000000CB9A048>
>>> computing...
computing...
computing...
computing...
computing...
computing...
>>> r.area
115.5
當我們在GUI界面中修改w,h值時,系統會設置area的標誌為重新計算,發現有對象在監聽area值(GUI),
因此他會直接更新值,並通知所有監聽對象 (修改一個,所有的對象值都會修改)
科學計算三維可視化---Traits(Property屬性)