python 類屬性裝飾器


  

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM