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) # 李四

相关推荐
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
长沙三为智能科技3 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
只睡四小时3 天前
Canvas 弹道联机实战:700 行 + 固定时间步长
python·websocket·html5·游戏开发·canvas
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
奇思妙想聪明勤奋的小羊3 天前
DeepAgents第5章:子Agent 与上下文隔离—让 Agent学会委派
人工智能·python·学习·语言模型
lpfasd1233 天前
2026年第38周GitHub趋势周报
python·科技·github