python属性装饰器_python 类属性装饰器

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

# 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(?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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值