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

相关推荐
FRing035 分钟前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)1 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..1 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert1 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
别问!问就是全会1 小时前
Jupyter Notebook 安装包下载|单元格分块运行,图表直接内嵌
ide·python·其他·jupyter
深蓝AI2 小时前
Python 缓存击穿实测:16 个并发请求如何只回源 1 次
python
benchmark_cc2 小时前
用 00700.HK 做港股行情清洗:字段核对、校验与个人量化开发实践
python·数据分析·pandas·量化交易·股票数据·quantdash
海的透彻2 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat3 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
北京中科新远科技3 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php