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代码阅读(第13篇):检测列表中的元素是否都一样