python:get和set
java里面有一件事情很让人崩溃,就是通过类里面的public函数访问类的私有属性对外提供接口,从数据库里面读出来的字段包装成对象之后,最重要的一件事情就是赶紧把字段做成private的,然后开始写public的get和set方法。这个过程很麻烦,但是却很重要,小小的一对儿函数给程序员提供了无限的可能(这里可以来脑补一个程序员大战黑产的惨烈故事...),然而,这种东西也确实很烦人,假如你反射了一个有几十个字段做属性的对象,这一堆get和set可是着实叫人抓狂,有些IDE甚至提供了自动生成get/set方法的功能(比如eclipse家族)。。。
那么python里面要怎样处理这种情况呢?
先来看看最土的办法:
class Test: def __init__(self): self.__key='init' def get_key(self): return self.__key def set_key(self,key): self.__key=key
看起来跟java没什么两样嘛......
然后注意,我要变型了:
class Student(): def __init__(self,name,age): self.__name=name self.__age=age @property def name(self): print('reading name') return self.__name @name.setter def name(self,name): print('setting name') self.__name=name @property def age(self): print('reading age') return self.__age @age.setter def age(self, age): print('setting age') self.__age = age @age.deleter def age(self): print('deleting age') del self.__age def __str__(self): return '姓名 '+self.__name+'年龄'+str(self.__age) def my_print(obj): print('-'*13) print(obj) print('-'*13) if __name__ == '__main__': stu = Student('小明',18) my_print(stu) my_print(str(stu.name)+'\n'+str(stu.age)) stu.age = 20 stu.name = '小强' my_print(stu) ''' #这个可以调deleter,打开注释跑跑看,也很有趣 del stu.age my_print(stu) '''
结果是这个样子:
------------- 姓名 小明年龄18 ------------- reading name reading age ------------- 小明 18 ------------- setting age setting name ------------- 姓名 小强年龄20 ------------- Process finished with exit code 0
其实嘛,就是@property的使用喽~(注意看那个被我注释掉的del,这个很好玩,调的是deleter)
这里节省的就是你调用getter和setter的时间,一个点就调出来了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python:LEGB标识符解析顺序
""" LEGB查询规则: L locals 局部变量,当前所在命名空间(如函数,模块等) 注意,包括函数的参数(形参) E Enclosing Function 闭包空间(外部嵌套函数的命名空间) G Globals 全局变量,某个python模块的命名空间 B Builtins python内建模块的命名空间 """ key='Hello'#模块全局 def test(): print(key)#全局,输出:Hello def test2(key): print(key,end='***')#局部(形参),输出 key参数传入的值 key=key+str(512) print(key) def test3(): #print(key) """ 这里↑遵循LEGB规则解析标识符key的时候, 在函数locals中发现了key=1024 key不再当作全局变量解析,所以打开注释后这里会报错: local variable 'key' referenced before assignment """ key=1024#注意和前面的test函数比较 print(key) def test4...
- 下一篇
python:好用的 with 语法
手动清理资源占用是个很痛苦的事情,比如刚学编程时候,老鸟就建议:写完open xxx 之后一定要写一个配对儿的 close,然后再往他俩中间写逻辑。 python 现在有个好玩的东西,利用上下文可以自动释放掉一个对象: class test(): def __init__(self,msg): print(msg) def __enter__(self): print('Enter Object test') def __exit__(self, exc_type, exc_val, exc_tb): print('Exit Object test') object=test('Hello') print('***head of code block***') with object as t: print('Did something here...') print('***end of code block***') 运行结果如下: Hello ***head of code block*** Enter Object test Did something here... Exit...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2全家桶,快速入门学习开发网站教程
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Red5直播服务器,属于Java语言的直播服务器
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Hadoop3单机部署,实现最简伪集群
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池