如果我们对所赋的值有一定的限制,比如要求名字必须是字符串,年龄必须是数字,否则会对方法的调用造成影响,这个时候单纯的赋值就不能满足这样的过滤效果了。既然是条件过滤,那么这几条代码就需要放在方法里,所以就有了setName(),getName()这样的方法,在set方法里做条件限制,使用的时候是这样的:
p1 = People('张三', 22)
p1.set('李四')
print(p1.getName())
这样其实已经可以了,很满足功能需要。而用@property是让这个更简洁,既保持直接对属性赋值的方便,又对条件做了限制:
实例:
# -*- coding: UTF-8 -*-
class People(object):
def __init__(self, name, age):
= name
self.age = age
@property
def name(self):
a = self._name
#返回前还可以对数据做处理,比如格式化等
return a
@name.setter
def name(self,value):
#在赋值之前添加判断
if not isinstance(value, str):
# 抛出异常
raise TypeError('People ,name must be a str!')
self._name = value
#调用的时候仍然是方便快捷的直接赋值:
p1 = People('张三', 22)
#=111
= '李四'
print()