Python随笔13

Posted bigbigtong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,大大的简化了我们的代码编写量。

以上是关于Python随笔13的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 代码片段编写 LaTeX 文档

Python代码阅读(第13篇):检测列表中的元素是否都一样

计算机基础系列一:网络基础和python基础(变量和程序交互)7月13和14日课堂预习/随笔/作业

随笔13 java中的普通代码块,构造代码块,静态代码块

VSCode自定义代码片段13——Vue的状态大管家

VSCode自定义代码片段13——Vue的状态大管家