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())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | # 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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律