python 类属性装饰器
2023-09-11 14:16:16 时间
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)
相关文章
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- python开发笔记-ndarray方法属性详解
- python-面向对象-09_类属性和类方法
- python位运算符详细介绍
- 【Python五篇慢慢弹(4)】模块异常谈python
- python: easyocr的安装和使用(easyocr 1.6.2 / Python 3.7.15 )
- Python 给自己的博客做个目录,从网页中抓取标题和创建日期
- Python 使用@property对属性进行数据规范性校验
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python编程语言学习:python中与数字相关的函数(取整等)、案例应用之详细攻略
- Python编程语言学习:python语言中快速查询python自带模块&函数的用法及其属性方法、如何查询某个函数&关键词的用法、输出一个类或者实例化对象的所有属性和方法名之详细攻略
- Python:python代码编程带你玩转双色球(了解双色球的概率逻辑)
- Python语言学习之双下划线那些事:python和双下划线使用方法之详细攻略
- Python编程专属骚技巧10
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- 〖Python 数据库开发实战 - Python与Redis交互篇②〗- 利用 redis-py 实现字符串类型的常用指令操作
- python基础知识之 Python代码规范
- 教你用Python自制拼图小游戏,轻松搞定熊孩子
- Python:cached_property缓存对象的属性
- python编程:__slots__限制class的属性
- python里使用正则表达式的DOTALL标志
- python 读取unicode编码文件
- Python子类调用父类内属性的方法
- Python技能树——进阶语法讲解(2)
- 【python 9】python注册器
- 【异常】前端ERR! stack Error: Can‘t find Python executable “python“, you can set the PYTHON env variable.
- 〖Python自动化办公篇④〗- 文件自动化管理 - 文件查找与基于文件内容查找文件