zoukankan      html  css  js  c++  java
  • 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,大大的简化了我们的代码编写量。

  • 相关阅读:
    观点 | 为什么说云主机比物理机故障率更低?
    7 天玩转 ASP.NET MVC — 第 7 天
    浅谈 OneAPM 在 express 项目中的实践
    Swift 2.0 到底「新」在哪?
    DevOps:怎么实现源代码注释和系统文档的自动化更新?
    JavaScript学习之路-为什么要学习JavaScript语法
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    Android精通之OrmLite数据库框架,Picasso框架,Okio框架,OKHttp框架
    AndroidStudio制作登录和注册功能的实现,界面的布局介绍
  • 原文地址:https://www.cnblogs.com/bigbigtong/p/10260689.html
Copyright © 2011-2022 走看看