Python中的getter和setter的方法使用详解

 更新时间:2022年12月06日 14:26:47   作者:恶霸程序员388  
基本上,在面向对象编程语言中,使用setter和getter方法的主要目的是为了确保数据的封装,这篇文章主要介绍了Python的getter和setter的方法使用详解,需要的朋友可以参考下

本文主要内容:

  • 解释setter和getter的使用方法解释@property装饰器的妙用
  • 在python中,setter和getter方法并不像其它编程语言中的那样。基本上,在面向对象编程语言中,使用setter和getter方法的主要目的是为了确保数据的封装。不像其它面向对象编程语言,python中的私有变量并不是真正的隐藏字段。在python中,通常在以下情况会用到setter和getter方法:
  • 在获取或者设置属性值的时候使用setter和getter方法为其添加验证逻辑避免对类的某些字段直接访问,比如类的私有变量不应该被外部调用者直击访问或者修改

使用普通函数实现setter和getter方法
要实现setter和getter属性,只是定义普通方法get()和set()并不能反产生任何特殊的行为,例如:

class Student(object):
    def __int(self, age=0):
        self._age = age
    
    # getter方法
    def get(self):
        return self._age
    
    # setter方法
    def set(self, value):
        self._age = value
        
xiaoming = Student()
# 使用setter方法设置age
xiaoming.set(20)
# 使用getter方法返回age
print(xiaoming.get())
print(xiaoming._age)

输出:

20
20

在上面代码中,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用于为属性创建文档说明。一个属性兑现有三个方法,getter()、setter()和delete()分别制定fget、fset、fdel。

class Adult(object):
    def __int(self):
        self.__age = 0
    
    # 获取属性_age的值
    def get_age(self):
        print('getter() method called')
        return self.__age
    
    # 设置属性_age的值
    def set_age(self, value):
        print('setter() method called')
        self.__age = value
    
    # 删除属性_age
    def del_age(self):
        del self.__age
        
    age = property(get_age, set_age, del_age)

laowang = Adult()
laowang.age = 60
print(laowang.age)

输出:

setter() method called
getter() method called
60

在上面的代码中,age就是一个属性对象,它保证了对私有变量的安全访问。

使用@property装饰器来实现setter和getter的行为
除了上面使用property()的方法来实现getter、setter方法的行为,在python中还可以装饰器@property来实现。@property是python的一个内置装饰器,使用装饰器的目的是改变类的方法或者属性,这样调用者就无需在代码中做任何改动。

class Adult(object):    
    def __init__(self):
        self.__age = 0
    
    @property
    def age(self):
        print('getter() method called')
        return self.__age
        
    @age.setter
    def age(self, value):
        if value < 18:
            raise ValueError('Sorry, you are a child, games not allowed')
        print('setter() method called')
        self.__age = value
        
xiaoli = Adult()
xiaoli.age = 19
print(xiaoli.age)

输出:

setter() method called
getter() method called
19

上面的代码清晰地展示了如何用pythonic的方式使用@property装饰器实现setter和getter属性。同时实现了对属性赋值时的有效性检查。

到此这篇关于Python的getter和setter的方法使用详解的文章就介绍到这了,更多相关Python的getter和setter的方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python opencv 图像拼接的实现方法

    python opencv 图像拼接的实现方法

    高级图像拼接也叫作基于特征匹配的图像拼接,拼接时消去两幅图像相同的部分,实现拼接合成全景图。这篇文章主要介绍了python opencv 图像拼接,需要的朋友可以参考下
    2019-06-06
  • 利用Python将txt文件录入Excel表格的全过程

    利用Python将txt文件录入Excel表格的全过程

    Python具有基本的文本文件读写功能,Python的标准库提供有更丰富的读写功能,下面这篇文章主要给大家介绍了关于如何利用Python将txt文件录入Excel表格的相关资料,需要的朋友可以参考下
    2021-11-11
  • python3 图片referer防盗链的实现方法

    python3 图片referer防盗链的实现方法

    本篇文章主要介绍了python3 图片referer防盗链的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • Python编程中对文件和存储器的读写示例

    Python编程中对文件和存储器的读写示例

    这篇文章主要介绍了Python编程中对文件和存储器的读写示例,包括使用cPickle储存器存储对象的例子,需要的朋友可以参考下
    2016-01-01
  • python题解LeetCode303区域和检索示例详解

    python题解LeetCode303区域和检索示例详解

    这篇文章主要为大家介绍了python题解LeetCode303区域和检索示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Python3单行定义多个变量或赋值方法

    Python3单行定义多个变量或赋值方法

    今天小编就为大家分享一篇Python3单行定义多个变量或赋值方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • 对django 2.x版本中models.ForeignKey()外键说明介绍

    对django 2.x版本中models.ForeignKey()外键说明介绍

    这篇文章主要介绍了对django 2.x版本中models.ForeignKey()外键说明介绍,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Python3 基础语法详解

    Python3 基础语法详解

    在本篇文章里小编给大家分享的是一篇关于Python3基础语法知识点总结内容,有兴趣的朋友们可以学习下,希望能够给你带来帮助
    2021-10-10
  • python自动化测试selenium核心技术等待条件教程

    python自动化测试selenium核心技术等待条件教程

    这篇文章主要为大家介绍了python自动化测试selenium核心技术等待条件教程的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • django 连接数据库出现1045错误的解决方式

    django 连接数据库出现1045错误的解决方式

    这篇文章主要介绍了django 连接数据库出现1045错误的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05

最新评论