标签:处理 code err 不可 需要 getname details 添加 style
1 class People(object): 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 p1 = People(‘张三‘, 22) 6 p1.name=‘李四‘ 7 print(p1.name) 8 9 ++++++++++++++++++++++result++++++++++++++++++++++++ 10 李四
但是如果我们对所赋的值有一定的限制,比如要求名字必须是字符串,年龄必须是数字,否则会对方法的调用造成影响,这个时候单纯的赋值就不能满足这样的过滤效果了。既然是条件过滤,那么这几条代码就需要放在方法里,所以就有了setName(),getName()这样的方法,在set方法里做条件限制,使用的时候是这样的:
1 p1 = People(‘张三‘, 22) 2 3 p1.set(‘李四‘) 4 5 print(p1.getName())
这样其实已经可以了,很满足功能需要。而用@property是让这个更简洁,既保持直接对属性赋值的方便,又对条件做了限制:
1 @property 2 def name(self): 3 a = self._name 4 #返回前还可以对数据做处理,比如格式化等 5 return a 6 @name.setter 7 def name(self,value): 8 #在赋值之前添加判断 9 if not isinstance(value,str): 10 # 抛出异常 11 raise TypeError(‘People object.name,name must be a str!‘) 12 self._name = value 13 #调用的时候仍然是方便快捷的直接赋值: 14 p1 = People(‘张三‘, 22) 15 p1.name=‘李四‘ 16 print(p1.name) 17 ++++++++++++++++++++++result++++++++++++++++++++++++ 18 李四
总之,@property就是既拥有set、get方法的灵活性,又具有属性直接赋值取值的简便性。
标签:处理 code err 不可 需要 getname details 添加 style
原文地址:https://www.cnblogs.com/zxqqlove/p/12994311.html