zoukankan      html  css  js  c++  java
  • 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()
     
     
     
  • 相关阅读:
    大搬家--百度之星 (递推)
    Scrambled Polygon--poj2007(极角排序模板)
    Space Ant--poj1696(极角排序)
    A. Link/Cut Tree--cf614A ()
    Ultra-QuickSort--POJ2299(归并排序求逆序数对)
    An Easy Problem?!--
    C. The Two Routes---cf602C(Dij)
    java 中jar的使用
    两种方法解决tomcat的 Failed to initialize end point associated with ProtocolHandler ["http-apr-8080"]
    Ajax(6) Ajax向servlet请求数据库操作 并显示到当前页面 这个未经测试
  • 原文地址:https://www.cnblogs.com/Rubick7/p/7801557.html
Copyright © 2011-2022 走看看