老师好,我有两个疑惑。
来源:12-20 更好的使用枚举
lemonlxn
2018-06-03
老师好,我有两个疑惑。
一是,图一中@pending.setter已将枚举类型转为数字,为什么还会等于图二中的
drift.pending (这个是数字类型)= PendingStatus.Redraw(这个是枚举类型)
第二个疑惑是,图一中的status,传入的是枚举类型,那么传入的是PendingStatus.Redraw吗?
如果传入的是枚举类型,那么转化为数字后,为什么还要等于图二的PendingStatus.Redraw?
1回答
-
爱吃土豆的芬里尔狼
2018-07-02
首先,你要搞清setter和getter的区别,setter(也就是图中的@pending.setter)是在赋值的时候生效,getter是在获取值的时候生效,也就是相同的属性名有两种使用场景,搞清这两者的关系后,来看你的问题.
第一个问题,图二中的"drift.pending = PendingStatus.Redraw"是赋值语句,因此会使用setter,传进的枚举值会在setter中转化为int型并赋给drift的_pending字段,而且drift.pending也不是int型,而是一个setter;
第二个问题,实际上是你搞混了,只有在drift取_pending值的时候才会触发getter,而在图二里面是setter,所以原理参考第一个问题,如果要使getter(也就是@property)触发,则需要用"print('drift.pending')"或者"drift.pending == PendingStatus.Redraw"等方式,此时drift内部会根据_pending的值(int型)在枚举类PendingStatus中取到相应的枚举值并返回,所以getter(@property)返回的是一个枚举值,当然可以和PendingStatus中的值比较了.
10
相似问题