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()
     
     
     
  • 相关阅读:
    穿戴式眼镜显示屏方案
    centos8 shell脚本定时restart workerman问题
    cmake中文文档(一)-编译命令行工具
    Dear ImGui中文文档(一)
    PHP实现布隆过滤算法
    case when的记录
    前端的一些记录
    z-index 弹出元素被原本页面的元素遮挡住
    DevExpress 导出pdf中文不显示或者乱码问题
    DevExpress控件位置的微调
  • 原文地址:https://www.cnblogs.com/Rubick7/p/7801557.html
Copyright © 2011-2022 走看看