Python之“属性property
Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情,比如:
- 将类方法转换为只读属性
- 重新实现一个属性的setter和getter方法
将类方法转换为只读属性:
class A: @property def x(self): return 'abc' a = A() a.x # Out[11]: 'abc' # 对属性函数赋值,将抛出异常 a.x = '123' # 被property装饰的方法,作为属性函数,不可赋值,只可读-----即,只读属性
重新实现一个属性的setter和getter方法
假设有一些遗留代码,它们是由一些对Python理解得不够好的人写的。
要使用这个类,我们必须要使用定义的getter和setter方法:
如果你像我一样,你之前已经看到过这类的代码:
class Fees: def __init__(self): self.__fee = 0 def get_fee(self): return self.__fee def set_fee(self, value): self.__fee = value f = Fees() f.set_fee(123) f.get_fee() # out: 123
如果你想添加可以使用正常点符号访问的属性,而不破坏所有依赖于这段代码的应用程序,你可以通过添加一个属性函数非常简单地改变它:
class Fees: def __init__(self): self.__fee = 0 def get_fee(self): return self.__fee def set_fee(self, value): self.__fee = value fee = property(fget=get_fee, fset=set_fee) f = Fees()
f.set_fee(123) f.get_fee() # out: 123 f.fee # out: 123 f.fee = 100 f.fee # out: 100
正如你所看到的,当我们以这种方式使用属性函数时,它允许fee属性设置并获取值本身而不破坏原有代码。
使用property装饰器、xxx.setter装饰器,重新设计上面的类:
class Fees: def __init__(self): self.__fee = 0 @property def fee(self): return self.__fee @fee.setter def fee(self, value): self.__fee = value f = Fees()
f.fee = 100 f.fee # Out[21]: 100
posted on 2019-02-23 13:33 myworldworld 阅读(126) 评论(0) 收藏 举报