Python随笔13

属性函数--property:

  Python中有一个属性函数的概念,可以用它来做一些用用的事情,比方说将类方法转换为只读属性或者重新实现一个属性的getter和setter方法

  重新实现类的getter和setter方法:

  在以往类中,我们要访问一个类的私有变量,直接访问时不可以的。一般需要定义一个getter()方法去获取这个属性;如果这个属性再定义时赋空值,还需要写一个setter()方法。如下: 

from decimal import Decimal
class Fees(object):
    # 定义一个构造函数,给私有变量fee赋值None
    def __init__(self):
        self.__fee = None
    # 定义一个方法访问私有变量
    def get_fee(self):
        return self.__fee
    #定义一个方法,修改私有变量值
    def set_fee(self,value):
        if isinstance(value,str):
            self.__fee = Decimal(value)
        elif isinstance(value,Decimal):
            self.__fee = value

f = Fees()
f.set_fee("8")
print(f.get_fee())

  输出结果为8

  除了用实例.方法名访问类的方法之外,还可以在不修改类的前提下,通过属性函数变相的修改类的私有属性和获取属性。

  

from decimal import Decimal
class Fees(object):
    # 定义一个构造函数,给私有变量fee赋值None
    def __init__(self):
        self.__fee = None
    # 定义一个方法访问私有变量
    def get_fee(self):
        return self.__fee
    #定义一个方法,修改私有变量值
    def set_fee(self,value):
        if isinstance(value,str):
            self.__fee = Decimal(value)
        elif isinstance(value,Decimal):
            self.__fee = value
    # 通过属性函数变相的获取属性和修改属性值
    fee = property(get_fee,set_fee)
f = Fees()
f.fee = "11"
print(f.fee)

  输出结果为11,这里就增加了一句  fee = property(get_fee,set_fee) 就可以直接利用实例.fee的方式修改和获取属性了

  

  利用property来重写setter和getter方法

from decimal import Decimal
class Fees(object):
    # 定义一个构造函数,给私有变量fee赋值None
    def __init__(self):
        self.__fee = None

    @property
    def fee(self):
        return self.__fee

    @fee.setter
    def fee(self,value):
        if isinstance(value,str):
            self.__fee = Decimal(value)
        elif isinstance(value,Decimal):
            self.__fee = value

f = Fees()
f.fee = "1"
print(f.fee)

  输出结果为1。

  可以看到,引入了property属性函数之后,重写getter和setter方法,我们就不需要知道具体是哪个方法了,同一的用fee,大大的简化了我们的代码编写量。

原文地址:https://www.cnblogs.com/bigbigtong/p/10260689.html