python 中描述符@property property 大概的样子

class MyProperty:

def init(self, fget=None, fset=None, fdel=None):

self.fget = fget # getter 方法

self.fset = fset # setter 方法

self.fdel = fdel # deleter 方法

def get(self, instance, owner):

if instance is None:

return self

if self.fget is None:

raise AttributeError("不可读")

return self.fget(instance)

def set(self, instance, value):

if self.fset is None:

raise AttributeError("不可写")

self.fset(instance, value)

def delete(self, instance):

if self.fdel is None:

raise AttributeError("不可删除")

self.fdel(instance)

def setter(self, func):

self.fset = func

return self # 返回自己,支持链式调用

class User:

def init(self, name):

self._name = name

@MyProperty # 等价于 name = MyProperty(name)

def name(self):

return self._name

@name.setter

def name(self, value):

self._name = value

u = User("张三")

print(u.name) # 调用 get

u.name = "李四" # 调用 set

print(u.name) # 李四

相关推荐
Scott9999HH5 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社6 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海6 小时前
python 列表、元组、集合和字典
开发语言·python
二十雨辰7 小时前
[爬虫]-Urllib
爬虫·python
萧瑟余晖7 小时前
JDK 26 新特性详解
java·开发语言
马优晨8 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
玉鸯8 小时前
Agent Hook:在概率推理之上,为 Agent 叠加确定性控制
python·langchain·agent
weixin_446260859 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
我的xiaodoujiao9 小时前
API 接口自动化测试详细图文教程学习系列32--Allure测试报告2
python·学习·测试工具·pytest