python 中的@property

Posted Rubick7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 中的@property相关的知识,希望对你有一定的参考价值。

如果在Java中定义类,我们经常使用类来封装一些属性,比如说,Student类中,有firstname 和 lastname,同时的,为了能访问和修改这个属性,我们还会设置set和get方法,但是,在Python中,我们可以使用@property的方法来将一个方法变成一个类属性,并且,利用同样的方式,来生成set和get方法,如下代码:

  ########################################################################

class Person(object):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self, first_name, last_name):
        """Constructor"""
        self.first_name = first_name
        self.last_name = last_name
 
    #----------------------------------------------------------------------
    @property
    def full_name(self):
        """
        Return the full name
        """
        return "%s %s" % (self.first_name, self.last_name)
 
在以上的代码中,我们定义了一个full name属性,是由first name和last name来生成的,这样的好处在于,我们可以在不添加现有属性的情况下,添加一个处理过的属性,并且可以在这个
方法中增加复杂的逻辑,并且,这个属性在没有定义setter和getter的方法前,只能被访问而不能被修改,如下代码:
  >> person = Person("Mike", "Driscoll")
>>> person.full_name
‘Mike Driscoll‘
>>> person.first_name
‘Mike‘
>>> person.full_name = "Jackalope"
Traceback (most recent call last):
  File "<string>", line 1, in <fragment>
AttributeError: can‘t set attribute
 
 
 
from decimal import Decimal
 
########################################################################
class Fees(object):
    """"""
 
    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        self._fee = None
 
    #----------------------------------------------------------------------
    @property
    def fee(self):
        """
        The fee property - the getter
        """
        return self._fee
 
    #----------------------------------------------------------------------
    @fee.setter
    def fee(self, value):
        """
        The setter of the fee property
        """
        if isinstance(value, str):
            self._fee = Decimal(value)
        elif isinstance(value, Decimal):
            self._fee = value
 
#----------------------------------------------------------------------
if __name__ == "__main__":
    f = Fees()
 
 
 

以上是关于python 中的@property的主要内容,如果未能解决你的问题,请参考以下文章

python [解析python中的nginx访问日志]解析python #log中的nginx访问日志

python中的self

Python学习篇 Python中的变量和数据类型

如何python3中调用python2中的方法

Python学习篇 Python中的集合

python 迭代python中的一小部分中的数字