python中的property

2021/4/23 12:25:36

本文主要是介绍python中的property,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

提示:这篇博文参考了两个博客,第一篇博文地址为:https://www.cnblogs.com/Lambda721/p/6132206.html,另一篇博文地址如下:关于python的property

需求:一个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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程