property装饰器:
后面跟的函数名就是以后的属性,它即是getter,这个必须有,只读属性
setter装饰器:
于属性名同名,接收两个参数,第一个是self,第二个是将要赋值的值,将属性变为可写
deleter装饰器:
可以控制属性是否删除
property装饰器必须在前,setter,deleter在后
property装饰器通过简单的方式,把对方法的访问变成对属性的访问,并起到一定的隐藏效果
class Person:
def __init__(self, name, age=18):
self.name = name
self._age = age
def getage(self):
return self._age
def setage(self, age):
self._age = age
tom=Person(‘tom‘)
print(tom.getage())
tom.setage(88)
print(tom.getage())
class Person:
def __init__(self,name,age=18):
self.name=name
self.__age=age
def getage(self):
return self.__age
def setage(self,value):
self.__age=value
biz=Person(‘biz‘)
print(biz.getage())
biz.setage(99)
print(biz.getage())
# import re
# p=‘‘‘bottle\r\nbag\r\nbig\napple‘‘‘
#
# regex=re.compile(‘(b\w+)‘)
# # b=regex.match(p)
# # print(b.groups(),b.group(),p[b.start():b.end()])
# # b=regex.search(p,1)
# # print(b.groups())
# regex=re.compile(r‘(b\w+)\r\n(?P<name1>b\w+)\r\n(?P<name2>b\w+)‘)
# # b=regex.match(p)
# # print(b)
# # print(b.groups(),b.group(0),b.group(1),b.group(2),b.group(3))
# # print(b.groupdict())
# # print(b.groupdict()[‘name1‘])
# # print(b.groupdict()[‘name2‘])
# # b=regex.findall(p)
# # print(b)
# # for m in b[0]:
# # print(type(m),m)
# regex=re.compile(‘(?P<head>b\w+)‘)
# b=regex.finditer(p)
# for m in b:
# print(type(m),m,m.group(),m.group(‘head‘),m.groupdict()[‘head‘])
#
# s=‘‘‘os.path([path]) sub-path‘‘‘
# print(re.split(‘[^-\w]+‘,s))
class Person:
def __init__(self,name,age=18):
self.name=name
self.__age=age
@property
def age(self):
return self.__age
@age.setter
def age(self,value):
self.__age=value
@age.deleter
def age(self):
del self.__age
biz=Person(‘biz‘)
print(biz.age)
biz.age=89
print(biz.age)
print(biz.__dict__)
print(dir(biz))
del biz.age
print(biz.__dict__)
print(dir(biz))
#### Notice:这三个方法同名
class Person:
def __init__(self,name,age=18):
self.name=name
self.__age=age
def getage(self):
return self.__age
def setage(self,value):
self.__age=value
def delage(self):
del self.__age
age=property(getage,setage,delage)
ciz=Person(‘ciz‘)
print(ciz.age)
ciz.age=77
print(ciz.age)
del ciz.age
print(ciz.__dict__)
class Person:
def __init__(self,name,age=18):
self.name=name
self.__age=age
age=property(lambda self:self.__age)
class Biv:
def __init__(self,chinese,english,history):
self._c=chinese
self._e=english
self.__h=history
def geth(self):
return self.__h
def seth(self,value):
self.__h=value
def gete(self):
return self._e
@property
def chinese(self):
return self._c
@chinese.setter
def chinese(self,value):
self._c=value
@chinese.deleter
def chinese(self):
del self._c
# hh=property(geth,seth)
hh=property(lambda self:self.__h,lambda self,value:exec("self._Biv__h=value"))
print(type(hh), hh)
p=Biv(4,5,6)
p.hh=444
print(type(p.hh),p.hh)
# print(p.geth())
# p.seth(88)
# print(p.geth())
# print(p.chinese)
# p._c=999
# print(p.chinese)
# p.chinese=888
# print(p.chinese)
print(p.chinese)
# del p.chinese
# del p._c
print(p.chinese)
原文:https://www.cnblogs.com/dissipate/p/13762447.html