zoukankan      html  css  js  c++  java
  • 科学计算三维可视化---Traits(Property属性)

    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),
    因此他会直接更新值,并通知所有监听对象 (修改一个,所有的对象值都会修改)

  • 相关阅读:
    部署第二个master节点
    Spark On YARN使用时上传jar包过多导致磁盘空间不够。。。
    Spark1.3使用外部数据源时条件过滤只要是字符串类型的值均报错
    spark1.3编译过程中遇到的一个坑
    Hive On Spark hiveserver2方式使用
    Hive On Spark概述
    Hive On Spark环境搭建
    RDD常用方法之subtract&intersection&cartesian
    SparkSQL DataFrames操作
    通过Spark SQL关联查询两个HDFS上的文件操作
  • 原文地址:https://www.cnblogs.com/ssyfj/p/9308895.html
Copyright © 2011-2022 走看看