老师好,我有两个疑惑。

来源:12-20 更好的使用枚举

lemonlxn

2018-06-03

老师好,我有两个疑惑。

一是,图一中@pending.setter已将枚举类型转为数字,为什么还会等于图二中的

drift.pending (这个是数字类型)= PendingStatus.Redraw(这个是枚举类型)


第二个疑惑是,图一中的status,传入的是枚举类型,那么传入的是PendingStatus.Redraw吗?

如果传入的是枚举类型,那么转化为数字后,为什么还要等于图二的PendingStatus.Redraw?

http://img.mukewang.com/szimg/5b136d9d000163b419181404.jpg


http://img.mukewang.com/szimg/5b136dba0001116719561418.jpg

写回答

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中的值比较了.

1
0

Python Flask高级编程之从0到1开发《鱼书》精品项目

7月老师深入浅出剖析Flask核心机制,和你一起探讨Python高级编程

2735 学习 · 1267 问题

查看课程