python getter setter_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属性。同时实现了对属性赋值时的有效性检查。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值