当前位置: 首页 > 后端技术 > Python

python的getter和setter方法详解

时间:2023-03-26 18:55:48 Python

本文主要内容:详解setter和getter的使用详解@property装饰器的神奇使用在python中,setter和getter不像其他编程语言。基本上,在面向对象的编程语言中,使用setter和getter方法的主要目的是确保数据封装。与其他面向对象的编程语言不同,python中的私有变量并不是真正的隐藏字段。在python中,setter和getter方法通常用于以下几种情况:在获取或设置属性值时使用setter和getter方法为其添加验证逻辑,避免直接访问类的某些字段,例如类的私有变量该类不应该由外部调用者直接访问或修改。使用普通函数实现setter和getter方法。要实现setter和getter属性,仅定义普通方法get()和set()不能产生任何特殊行为,例如:classStudent(object):def__int(self,age=0):self._age=age#gettermethoddefget(self):returnself._age#setter方法defset(self,value):self._age=valuexiaoming=Student()#使用setter方法设置agexiaoming.set(20)#使用getter方法toreturnageprint(xiaoming.get())print(xiaoming._age)output:2020上面代码中set_age()和get_age()方法和普通方法一样,没有区别,那么如何实现与getter和setter功能相同?这需要python中的特殊方法property()。使用property()方法实现setter和getter行为property()是python中的一个内置方法,它创建并返回一个属性对象。属性对象具有三个方法,getter()、setter()和delete()。property()内置方法有四个参数,property(fget,fset,fdel,doc)。fget是用来获取属性值的函数,fset是用来设置属性值的函数,fdel是用来删除属性的函数,doc是用来为属性创建文档的。属性的cashing方法有3种,getter()、setter()、delete()分别制定fget、fset、fdel。classAdult(object):def__int(self):self.__age=0#获取属性_age的值defget_age(self):print('getter()methodcalled')returnself.__age#设置值属性_ageValuedefset_age(self,value):print('setter()methodcalled')self.__age=value#deleteproperty_agedefdel_age(self):delself.__ageage=property(get_age,set_age,del_age)laowang=Adult()laowang.age=60print(laowang.age)output:setter()方法调用getter()方法调用60上面代码中age是一个属性对象,它保证了对私有变量的安全访问。使用@property装饰器实现setter和getter的行为除了使用上面的property()方法实现getter和setter方法的行为外,还可以在python中实现装饰器@property。@property是python内置的装饰器。使用装饰器的目的是改变类的方法或属性,使调用者不需要对代码做任何改动。classAdult(object):def__init__(self):self.__age=0@propertydefage(self):print('getter()方法调用')returnself.__age@age.setterdefage(self,value):ifvalue<18:raiseValueError('对不起,你是孩子,不允许玩游戏')print('调用了setter()方法')self.__age=valuexiaoli=Adult()xiaoli.age=19print(xiaoli.age)output:setter()methodcalledgetter()methodcalled19上面的代码清楚地展示了如何使用@property装饰器以pythonic方式实现setter和getter属性。同时实现了给属性赋值时的有效性检查。