python屬性裝飾器 python 類屬性裝飾器

2021-10-11 05:05:10 字數 3732 閱讀 9829

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 ...