@property和@setter和@getter
以下四种情况:
只读不可写
可写可读
不可写不可读(那你就没必要自己把这个成员变量封装到类里面了吧)
可写不可读(不存在)
所以常见情况其实只有两种.
@property | @xxx.getter | @xxx.setter | 可写 | 可读 | 代码 | 备注 |
O | X | O | O | O | hello1.py | |
O | X | X | X | O | hello2.py |
这三个装饰器件的效果是:
可读不一定可写
可写的一定可读
#--------------------------------------附录---------------------------------------------------------------
hello1.py
class Rectangle(object):# 服务于返回数值
@property
def width(self):
# 变量名不与方法名重复,改为true_width,下同
print("@property called")
return self.true_width# 服务于设数值
@width.setter
def width(self, input_width):
print("setter method called")
print("input_width=",input_width)
self.true_width = input_width
#-----------------------------------------------------------------
@property
def height(self):
return self.true_height
@height.setter
#与property定义的方法名要一致
def height(self, input_height):
self.true_height = input_height
#-----------------------------------------------------------------
s = Rectangle()
# 与方法名一致
s.width = 1024
s.height = 768print("*********下面是输出区域************")
print("s.width=",s.width)
print("s.true_width=",s.true_width)
print("--------------------")
print(s.height)
hello2.py
class Student(object):
#服务于返回(可读)
@property
def birth(self):
return self._birth# 服务于设数值(可写)
@birth.setter
def birth(self, value):
self._birth = value
#-----------------------------------------------------------------#服务于返回(可读)
@property
def age(self):
return 2015 - self._birth#-----------------------------------------------------------------s = Student()
# 与方法名一致
s.birth = 1024
# s.age = 768#如果执行此句会报错print("*********下面是输出区域************")
print("s.birth=",s.birth)
print("s.age=",s.age)
【@property和@setter和@getter】
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理
- 烦恼和幸福