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)