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) # 李四
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)