• 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,大大的简化了我们的代码编写量。

  • 相关阅读:
    集合
    字典
    Visual Studio 2017 发布
    表现设身处地的方法:杜彬(Ben Duffy)方法
    Can RemObjects SDK parameters be passed via the URI?
    转:RemObjects SDK 简介
    转:RemObject 服务器端自调用的方法
    转: Delphi多层开发方案比较
    Embed
    log4d 的使用(转)
  • 原文地址:https://www.cnblogs.com/bigbigtong/p/10260689.html
Copyright © 2020-2023  润新知