property裝飾器:
後面跟的函式名就是以後的屬性,它即是getter,這個必須有,唯讀屬性
setter裝飾器:
於屬性名同名,接收兩個引數,第乙個是self,第二個是將要賦值的值,將屬性變為可寫
deleter裝飾器:
可以控制屬性是否刪除
property裝飾器必須在前,setter,deleter在後
property裝飾器通過簡單的方式,把對方法的訪問變成對屬性的訪問,並起到一定的隱藏效果
classperson:
def __init__(self, name, age=18):
self.name=name
self._age=age
def getage(self):returnself._age
def setage(self, age):
self._age=age
tom=person('tom')
print(tom.getage())
tom.setage(88)
print(tom.getage())
classperson:
def __init__(self,name,age=18):
self.name=name
self.__age=age
def getage(self):returnself.__age
def setage(self,value):
self.__age=value
biz=person('biz')
print(biz.getage())
biz.setage(99)
print(biz.getage())
# import re
# 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(?pb\w+)\r\n(?pb\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
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:這三個方法同名
classperson:
def __init__(self,name,age=18):
self.name=name
self.__age=age
def getage(self):returnself.__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=77print(ciz.age)
del ciz.age
print(ciz.__dict__)
classperson:
def __init__(self,name,age=18):
self.name=name
self.__age=age
age=property(lambda self:self.__age)
classbiv:
def __init__(self,chinese,english,history):
self._c=chinese
self._e=english
self.__h=history
def geth(self):returnself.__h
def seth(self,value):
self.__h=value
def gete(self):returnself._e
@property
def chinese(self):returnself._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=444print(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)
python中的屬性裝飾器
class person def init self,name,age 18 self.name name self.age age property 屬性裝飾器,該裝飾器裝飾方法,下文中都必須用該方法 defage self 給你看,不希望你修改 print getter return self....
python裝飾器 Python 裝飾器
簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...
Python屬性的修改(裝飾器)
一 property 將乙個方法 偽裝成乙個 屬性 class person def init self,name,hight,weight self.name name self.hight hight self.weight weight property defbmi self return ...