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

Logo

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

更多推荐