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的时间,一个点就调出来了。