0%

Python property() 函数:如何使用? 在什么场景下使用?

Python property() 函数:如何使用? 在什么场景下使用?

在面向对象编程中, 我们常常需要对类的属性赋值.
我们举个例子, 摄氏度和华氏度转换的类, 就像酱

class Celsius:
    def __init__(self, temperature = 0):
        self.temperature = temperature
    def to_fahrenheit(self):
        return (self.temperature * 1.8) + 32

此时, 我们可以正常访问该类Celsius的属性temperature,也可以对该属性进行赋值.
此时你觉得很完美了!
直到有一天, 你对其属性进行赋值:

celsius = Celsius(temperature=-555)

然后你发现很神奇的能运行成功.
此时赶快查看里面的属性值. 发现:

celsius.temperature
>>>-555

此时你觉得不合理了, 温度的是有范围的, 所以你想方法要对其属性temperature进行限制.
但是按照上述的方法必然不可行的, 因此你面向搜索引擎编程, 发现可以使用python的装饰器property()满足这个需求.

property()的作用

  1. 将被装饰的方法转为属性, 让外部使用访问属性的规则访问该方法.
  2. 对该属性进行限制
  3. 也可以限制属性只读状态.

使用

class Celsius(object):

    @property
    def temperature(self):
        return self._temperature

    @temperature.setter
    def temperature(self, value):
        if not isinstance(value, int):
            raise ValueError('temperature must be an integer!')
        if value < -273:
            raise ValueError('temperature can't below -273!')
        self._temperature = value

这样就将属性temperature限制在-273以上了.

但是现在还有一个疑问, 属性temperature是可读写权限的, 如果想让属性只具有读权限, 防止外部修改属性, 这种情况下又怎么写呢?
方案: 不要写.setter方法即可.

https://www.liaoxuefeng.com/wiki/1016959663602400/1017502538658208
https://docs.python.org/release/2.6/library/functions.html#property
https://www.runoob.com/python/python-func-property.html
https://www.tianqiweiqi.com/python-property.html

原文博主: 热衷开源的宝藏Boy
原文链接: http://www.fangzengye.com/article/1626690803
版权声明: 自由转载-非商用-禁止演绎-保持署名| CC BY-NC-ND 3.0

评论区