科学计算三维可视化---Traits属性的功能
Traits属性的功能
Traits库为python的属性增加了类型定义的功能,除此之外他还提供了5个特殊的功能(可以为用户的界面响应提供基本能力):
初始化:每个traits属性都有自己的默认值
验证:是traits属性有明确的类型定义,只有满足定义的值时才能给他赋值
代理:traits属性值可以代理给其他对象实例的属性
监听:是为了当traits属性发生变化时,可以运行事先指定的函数
可视化:是拥有traits属性的对象,可以方便的生成可以编辑traits属性的界面
使用
from traits.api import HasTraits,Delegate,Instance,Int,Str class Parent(HasTraits):
#初始化
last_name = Str("Zhang") #初始化 class Child(HasTraits):
age = Int
#验证
father = Instance(Parent) #定义了father属性是Parent的实例,而此时father的默认属性是None
#代理
last_name = Delegate('father') #通过Delagate为child对象创建了代理属性last_name,代理功能将使得c.last_name和c.father.last_name始终保持相同的值
#监听
def _age_changed(self,old,new):
print("Age change from %s to %s"%(old,new))
>>> p = Parent() #实例化对象
>>> c = Child()
代理:
(由Delegate生成的属性,其必须是由父类实例代理而来的,两者保持一致性<当子类没有主动修改值时,会一直随着父类实例属性变化,当子类修改属性后,就不会再随着改变>,不过前提是已经声明了父类实例)
>>> c.last_name
Traceback (most recent call last):
File "<stdin>", line , in <module>
AttributeError: 'NoneType' object has no attribute 'last_name' #说明没有设置c.father属性,无法获得last_name属性
>>>
正确使用
>>> c.father = p
>>> c.last_name
'Zhang'
>>> p.last_name
'Zhang'
>>> p.last_name = "li"
>>> p.last_name
'li'
>>> c.last_name #子类没有修改自己属性前,会一直随着父类变化
'li'
>>> c.last_name = "wang" #子类修改了自己的属性后,不会再随着父类改变而变动了
>>> p.last_name
'li'
>>> p.last_name = "li"
>>> c.last_name
'wang'
>>> p.last_name = "li1"
>>> c.last_name
'wang'
验证(使用时在代理前面,这里放在后面方便理解):
上面代理父类的属性时,我们必须先将父类实例赋值给我们的验证属性
#验证
father = Instance(Parent) #定义了father属性是Parent的实例,而此时father的默认属性是None
上面只是说明father属性必须是Parent的实例,类型验证必须一致,但是我们还没有进行赋值
>>> c.father = p #在赋值基础上进行了验证,成功后father属性不为None,代理也开始生效
>>> c.last_name
'Zhang'
监听(监听函数与属性之间的关系 " _属性名_changed " 不需要属性,只声明监听方法就会含有该属性):
#监听
def _age_changed(self,old,new):
print("Age change from %s to %s"%(old,new))
>>> c.age =
Age change from to
可视化(使用configure_traits来显示一个修改属性的对话框):
>>> c.configure_traits()

>>> c.print_traits() #输出所有的traits属性
age:
father: <__main__.Parent object at 0x000000000EADA3B8>
last_name: 'wang'
>>> c.get() #获取字典类型的traits属性
{'last_name': 'wang', 'father': <__main__.Parent object at 0x000000000EADA3B8>,
'age': }
>>> c.set(age = ) #使用set设置值
Age change from to
<__main__.Child object at 0x000000000EADA4C0>
注意:
我们若是在子类中使用了__init__方法,那么在其中必须调用父类的__init__方法,否则traits属性的一些功能将无法使用
C++ traits技术浅谈
科学计算三维可视化---Traits属性的功能的更多相关文章
- 科学计算三维可视化---Traits属性的监听
Traits属性的监听 HasTraits对象所有Traits属性都自动支持监听功能,当每个Traits属性发生变化时,HasTraits对象会通知监听此属性的函数 两种监听模式 静态监听 动态监听 ...
- 科学计算三维可视化---Traits介绍
简介 Traits是开源扩展库,Traits本身与科学计算可视化没有直接关联,但他其实TVTK,Mayavi,TraitsUI基础 安装: pip3 install traits--cp36-cp36 ...
- 科学计算三维可视化---Traits(Property属性)
Property属性 使用Property函数为类创建Property属性,Property属性用法和一般属性相同,但是他在获取值和赋值时会调用相应的方法 traits库也提供了Property属性 ...
- 科学计算三维可视化---Traits(Event和button属性)
Event和button属性 是两个专门用于处理事件的change属性 Event属性和其他Trait属性不一样 Button属性是由Event属性继承而来的 Event监听 from traits. ...
- Python科学计算三维可视化(整理完结)
中国MOOC<Pyhton计算计算三维可视化>总结 课程url:here ,教师:黄天宇,嵩天 下文的图片和问题,答案都是从eclipse和上完课后总结的,转载请声明. Python数据三 ...
- 科学计算三维可视化---Mlab基础(管线控制函数)
科学计算三维可视化---TVTK管线与数据加载(可视化管线和图像管线了解) 科学计算三维可视化---Mayavi入门(Mayavi管线) Mlab管线控制函数的调用 Sources:数据源 Filte ...
- 科学计算三维可视化---Mlab基础(数据可视化)
推文:科学计算三维可视化---TVTK库可视化实例 使用相关函数:科学计算三维可视化---Mlab基础(管线控制函数) 一:mlab.pipeline中标量数据可视化 通过持续实例,来感受mlab对数 ...
- 科学计算三维可视化---Mlab基础(鼠标选取交互操作)
一:鼠标选取介绍 二:选取红色小球分析 相关方法:科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数) 1.小球场景初始化建立 import numpy as np from maya ...
- 科学计算三维可视化---TraitsUI的介绍
TraitsUI的介绍 Python中存在Tkinter,wxPython,pyQt4等GUI图像界面编写库,这三类库要求程序员掌握众多的GUI API函数 对于科学计算的应用来说,我们希望可以快速的 ...
随机推荐
- java怎样把后台值传到前台
后台代码:if(this.Request["type"]!=null){aaa=this.Request["type"].ToString(); try{bbb ...
- 校友聊NABCD需求分析
校友聊 NABCD需求分析 N:内网用户流量不够使用 A:基于局域网进行通讯 B:通讯不花费外网流量 C:目前学校还没有使用 D:将软件放在校园网,可以下载使用
- python learning IO.py
f = open('test.txt', 'r') # 'r' 表示只读 s = f.read() # 调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示 ...
- Beta阶段DAY5
一.提供当天站立式会议照片一张 二.每个人的工作 1.讨论项目每个成员的昨天进展 刘阳航:改进UI,美化界面. 林庭亦:优化代码结构 郑子熙:改进UI,美化界面. 陈文俊:优化代码结构 2.讨论项目每 ...
- 性能测试问题_tomcat占用内存很高,响应速度很慢
Cronolog 1. 问题描述 Tomcat占用服务器内存过大导致访问变慢 2. 问题原因 查看catalina.out文件过大,写日志时占用内存过大 3. 解决 ...
- java中的Serializable接口的作用
实现java.io.Serializable 接口的类是可序列化的.没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化. 序列化类的所有子类本身都是可序列化的.这个序列化接口没有任何方法和域, ...
- laravel多环境配置(local,testing,production)
根据不同的环境有不同的配置,laravel中,可以把配置写到.env文件中 在系统中,可以使用env(key, "默认值")来获取env中的配置信息 在laravel中运行时,会运 ...
- android之layer-list
效果图: 实现代码: <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:and ...
- UVA10054_The Necklace
很简单,求欧拉回路.并且输出. 只重点说一下要用栈来控制输出. 为啥,如图: 如果不用栈,那么1->2->3->1就回来了,接着又输出4->5,发现这根本连接不上去,所以如果用 ...
- POJ3041_Asteroids
这个题目说,有一个N*N的规格的方格.某些格子里有*号,每次可以消除一行或者一列中所有的*号.最少需要消多少次? 新学到的,什么什么定理,最少点覆盖等于最大匹配数. 这个定理可以这样来理解(看别人的) ...