需求:一个People类,类中很简单就只年龄和名字的属性,在实例化的时候需要对年龄的数值进行判断,若在合理的范围之内则进行正常实例化,否则打印出提示信息。
先看如下的一个 *** 作:
class People(object): def __init__(self,name,age): self.name = name self.age = age def get_info(self): print("The %s is %d years old" % (self.name, self.age))
然后做如下 *** 作:
a = People("job", 23) #实例化a.get_info() #得到信息a.name = "Swift" #更改属性的值a.age = 1000 #对age的更改显然不符合实际需求,因为人的年龄不可能达到1000岁的,a.get_info() #得到更改之后的信息
The job is 23 years old #更改之前的信息The Swift is 1000 years old #更改之后的信息
上述 *** 作的结果
改进:在实例化的时候,希望能够对age的范围进行判断,若范围合理则进行实例化 *** 作,否则提示用户。
class People(object): def __init__(self,name,age): self.name = name self.age = age def set_age(self,age): #对age的值进行判断 if age > 0 and age < 100: self.age = age else: print("the age is invalID value, Please check it!") exit() def get_info(self): print("The %s is %d years old" % (self.name, self.age))
上述代码改进之后,做如下 *** 作:
>>> a = People("job", 23) #在实例化时传入的age数值仍然不会判断是否合理>>> a.get_info()The job is 23 years old>>> a.set_age(124) #修改数值时调用set_age方法则可以进行合理范围判断>>> a.get_info()the age is invalID value, Please check it!
分析:在使用set_age修改age值时可以对age的值进行判断,但是这样调用总是没有直接使用a.age = value的形式方便。
为了解决这个问题,python引入了property语法糖。
class People(object): def __init__(self,name,age): self.name = name self.__age = age @property def age(self): return self.__age @age.setter def age(self,age): if age > 0 and age < 100: self.__age = age else: print("the age is invalID value, Please check it!") exit()
注意: 第一个age(self)是get方法,用@property装饰,第二个age(self, score)是set方法,用@age.setter装饰,@age.setter是前一个@property装饰后的副产品。
执行结果如下:
>>> a = People("Job", 23)>>> print(a.age)23>>> a.age = 123 #通过age赋值,检查数值的范围是否合理>>> print(a.age)the age is invalID value, Please check it!
可以看到对age的调用其实在调用set方法。
在这里是把property作为语法糖使用,也可以作为property函数使用,作为函数使用的用法可以参考博文开始提高的第二篇博文中最后面的介绍!
总结以上是内存溢出为你收集整理的python中的property全部内容,希望文章能够帮你解决python中的property所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)