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的方法使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3监控CentOS磁盘空间脚本

    python3监控CentOS磁盘空间脚本

    这篇文章主要为大家详细介绍了Python3监控CentOS磁盘空间脚本,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Python编辑和运行的四种方式

    Python编辑和运行的四种方式

    本篇内容主要是讲python在电脑上编辑和运行的几种不同方式,后面主要是在pycharm中去写代码,然后运行,其实还有其他的方式可以在电脑上写python代码和运行python代码,需要的朋友可以参考下
    2024-08-08
  • python批量创建变量并赋值操作

    python批量创建变量并赋值操作

    这篇文章主要介绍了python批量创建变量并赋值操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Python安装Scrapy库的常见报错解决

    Python安装Scrapy库的常见报错解决

    本文主要介绍了Python安装Scrapy库的常见报错解决,文中通过图文示例介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-11-11
  • 浅谈Python中的正则表达式

    浅谈Python中的正则表达式

    正则表达式广泛用于与文字、字符串的格式化,放到Python里使用,再合适不过.尤其是在编写爬虫时,用正则表达式匹配URL、匹配IP等,正则表达式都是一个简单、高效的选择,需要的朋友可以参考下
    2021-06-06
  • Python 线程池模块之多线程操作代码

    Python 线程池模块之多线程操作代码

    最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?今天小编给大家分享下实现代码,感兴趣的朋友一起看看吧
    2021-05-05
  • Python基于域相关实现图像增强的方法教程

    Python基于域相关实现图像增强的方法教程

    当在图像上训练深度神经网络模型时,通过对由数据增强生成的更多图像进行训练,可以使模型更好地泛化。本文将为大家介绍Python基于域相关的图像增强实现方法,需要的可以了解一下
    2022-01-01
  • python进阶教程之动态类型详解

    python进阶教程之动态类型详解

    这篇文章主要介绍了python进阶教程之动态类型详解,动态类型是动态语言的特性,本文对多种动态类型应用做了讲解,需要的朋友可以参考下
    2014-08-08
  • 中秋将至利用python画一些月饼从天而降不用买了

    中秋将至利用python画一些月饼从天而降不用买了

    中秋没两天就要到了,今天小编就利用python画个月饼的小游戏,文中内容非常详细,感兴趣的小伙伴一定要收藏起来送给远方的朋友呀
    2021-09-09
  • 如何用python给数据加上高斯噪声

    如何用python给数据加上高斯噪声

    这篇文章主要介绍了如何用python给数据加上高斯噪声问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论