首页 > 科技 >

Python 中属性 Properties 和 Getters Setters 对比(3)

2018-06-17 03:08:47 网络整理 阅读:184 评论:0

假如我们限定 x 的取值只能是 0到100,不用 Getters 和 Setters 怎么实现呢?

Python 引入了属性 Property,,请看使用 Property 的类:

Python 中属性 Properties 和 Getters Setters 对比(3)

输出:

Python 中属性 Properties 和 Getters Setters 对比(3)

使用 @property 装饰器装饰了一个获取属性值的方法。

另一个装饰器 @x.setter 装饰的是设置属性的方法上面。例如如果方法名是 y,就应该使用 @y.setter 装饰。

另外需要说明的是,在 __init__ 方法中,使用 self.x = x 同样调用了被装饰的方法,进行验证。

还有就是两个方法的名称相同,只是参数不同,分别是 def x(self)和 def x(self, x)。

不使用装饰器

可选的,不使用装饰器,Python 提供了另一种方法定义属性。

Python 中属性 Properties 和 Getters Setters 对比(3)

使用 x = property(get_x, set_x) 就可以按照属性的方式访问。或者访问 set_x() 和 get_x() 方法。不过这样违背了 Python 的一个哲学(philosophy):应该始终只有一种优先的解决方案,能够很明显的处理它

即便使用这种方法能够解决问题,我们应该使用装饰器 @property。因为这样更 Pythonic。

相关文章