1. 程式人生 > >科學計算三維可視化---Traits(Property屬性)

科學計算三維可視化---Traits(Property屬性)

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屬性)