分享

python 类属性装饰器

 印度阿三17 2020-10-02

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)
来源:https://www./content-1-741301.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约