在一个辣妈爆照的问题里,我一老爷们儿来插一嘴不知道合不合适。不过仗着我妇产科医生的身份,就腆着脸来答了。 题目问“如何快速恢复”,但是首先要强调的是,并不一定越快越好。 女性分娩后,各个脏器系统恢复到孕前的生理状态,本身就是需要一定时间的,…
他的畫風在galgame是異類,也莊嚴的突出了東方傳統的美學,陰翳與官能美的古典風格,就像《枕草子》里的"烏黑亮麗的垂肩長髮實在是美不可喻”,從他的顏色色彩里和描繪人物的眼神與纖細的手腳與細膩的線條美都體現了他對美的理解內核的表現,顏色偏灰色的戀…
“因为我就是从零基础自学的吉他,而如今吉他已经成了我最好的朋友” 吉他的历史可以追溯到公元前,发展至今已有很多种类,古典吉他、民谣吉他、电吉他、低音吉他(贝斯…
题主有一点说对了,口红是个坑,而且这个坑奇大无比,我身边有很多囤了几十只唇膏的妹子。在题主还具备理智的时候,想要把必备口红都准备好,是一件好事~我来跟题主建议一下(虽然我觉得妹子们基本都收不住手。。。) 首先,
口红在妆效上分为釉面、亮面珠、…亲测普拉提有效 一个月大腿瘦了4厘米 大腿根部从53.5cm--49.5cm 体重 51.2kg--48.4kg 有人问我为什么那么瘦腿那么粗 梨型身材伤不起!大腿最粗的时候56 腰最细的时候57 你们感受一下 首先 你不是肌肉型 只是误以为自己是肌肉型 我也这样误会了自己好久 先要…
知乎用户 澳洲/旅行/露营/做饭?/澳洲全境自驾旅游…
我一个个打出来,没听别赞,不好听请向我扔鸡蛋! 网易云音乐歌单建好----凯瑟琳黛玉 链接如下,里面还有好多更新
Python作为一种动态编程语言,它没有变量类型,这种灵活性给快速开发带来了很多便利,不过它也有缺点。Traits库的一个很重要的目的就是为了解决这些缺点所带来的问题。
对Traits作用的理解 当函数,类或者一些封装的通用算法中的某些部分会因为数据类型不同而导致处理或逻辑不同(而我们又不希望因为数据类型的差异而修改算法本身的封装时),traits会是一种很好的解决方案。
Traits库最初是为了开发Chaco(一个2D绘图库)而设计的,绘图中有很多绘图用的对象,每个对象都有很多例如线型、颜色、字体之类的属性。为了方便使用,每个属性可以允许多种形式的值。
也就是说可以用字符串、整数、元组等类型的值表达颜色,这样的需求初看起来用python的无类型变量是一个很好的选择,因为我们可以把各种各样的值赋值给颜色属性,虽然颜色属性可以接受多样的值却不能接受像"abc"、0.5等这样的,而且虽然为了方便用胡使用,对外接口可以接受各种各样形式的值,但是在内部必须有一个统一的表达方式来简化程序的实现。
用Trait属性可以很好的解决这些问题:
可以看到Circle类没有color属性,而它的实例c则有一个color属性,其初始值为white;
c.color支持“red”、0x00ff00和(0,255,255)等值,但是它不支持0.5这样的浮点数,于是一个很详细的出错信息告诉我们它所有能支持的值。
执行c.configure_traits()之后,出现如图对话框以供我们修改颜色属性,任意选择一个颜色、按OK就可以看到代码行中返回了True,颜色已经改变。
需要在iPython -wthread或者spyder下运行此函数,否则会出现对话框不响应的问题。
trait为Python对象的属性增加了类型定义的功能,此外还提供了如下额外的功能:
# 由于没有设置c的father属性,因此无法获得
在对话框中修改c的属性值;
在对话框修改了年龄,可以看到触发了函数。
点击Father按钮修改信息,可以看到c的属性也发生了改变;
调用get方法获得一个描述对象所有trait属性的dict:
还可以调用set方法设置trait属性的值,set方法可以同时配置多个trait的属性:
前面介绍的方法都是在类的定义中声明Trait属性,在类的实例中使用Trait属性。由于Python是动态语言,因此Traits库也提供了为某个特定的实例添加Trait属性的方法。
直接产生HasTtraits类的一个实例a然后调用其add_trait方法动态地为a添加一个名为x的Trait属性,其类型为Float,初始值为3.0
接下来在创建一个HasTraits类的实例b,用add_trait方法为b添加一个属性a,指定其类型为HasTraits类的实例。然后把实例a赋值给实例b的属性a:b.a。
然后为实例b添加一个类型为Delegate(代理)的属性y,它是b的属性a所表示的实例的属性x的代理,即b.y是b.a.x的代理。
注意我们在用Delegate声明代理的时候,第一个参数b的一个属性名“a”,第二个参数是此属性的属性ign“x”,modify=True表示可以通过b.y修改b.a.x的值。我们将b.y的值改为10的时候,a.x的值也改变了。
标准的Python提供了Property功能,Property看起来像对象的一个成员变量,但是在获取它的值或者给它赋值的时候实际上时调用了相应的函数。Traits也提供了类似的功能。
Traits所提供的Property和标准的Python有所不同,Traits中根据属性名直接决定了它的访问函数,当用户读取area值时,将得到_get_area函数的返回值;而设置area值时,_set_area函数将被调用。此外通过关键字depends_on,指定当width和height属性变化时自动计算area属性。
注意,在运行r.width=10时并没有立即运行_get_area函数,这是因为系统知道没有任何物体在监听r.area属性,因此它只是保存一个需要重新计算的标志。等到真正获取area的值时,再调用_get_area函数。
调用r.configure_traits()会弹出一个编辑界面,修改数值会发现每次按键area的值都会发生改变,所以每次按键都会调用_get_area函数更新其值,并且通知所有监听对象。
获得与area属性对应的Trait,此对象保存了area属性运作需要的信息
_notifiers函数返回所有的通知对象,当area属性改变时,这里对象将被通知
HasTraits类的所有对象的所有trait属性都自动支持监听功能。当某个trait属性值发生改变时,HasTraits对象胡uitongzhi所有监听此属性的函数。
监听函数分为静态和动态两种
运行这个文件,可以看到属性值被改变
改变属性值,可以看到函数被调用
监听函数按照顺序被调用
动态监听函数不但可以是普通函数,还可以是某个对象的方法。
当多个trait属性都需要同一个静态监听函数时,用固定的函数名就比较麻烦,Trait库提供了解决方案:用@on_trait_changed对监听函数进行修饰。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。