鱼C论坛

 找回密码
 立即注册
查看: 2039|回复: 1

求教各位大佬,函数间是如何关联调用,如何实现工作流程作用的?

[复制链接]
发表于 2023-3-27 11:04:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
class MyProperty():
    def __init__(self,fget=None,fset=None,fdel=None):
        self.fget=fget
        self.fset=fset
        self.fdel=fdel
    def __get__(self,instance,owner):
        return self.fget(instance)
    def __set__(self,instance,value):
        sefl.fset(nstancd,value)
    def __delete__(self,instance):
        self.fdel(instance)
    def getter(self,func):
        self.fget=func
        return self
    def setter(self,func):
        self.fset=func
        return self
    def deleter(self,func):
        self.fdel=func
        return self

class D:
    def __init(self):
        self._x = 250
    @MyProperty
    def x(self):
        return self._x
    @x.setter
    def x(self,value):
        self._x=value
    @x.deleter
    def x(self):
        del self._x

求教各位大佬。函数间是如何关联调用,如何实现工作流程作用的?
__init__()中的fget
Def __get__()
Def getter
三者之间如何产生关联?
如何产生工作流程作用?

func又是如何工作的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-27 11:26:10 | 显示全部楼层
这段代码中定义了一个 MyProperty 类,它是一个描述符,可以通过装饰器 @MyProperty 的方式将其应用于类的属性上。当这个属性被访问、修改或删除时,MyProperty 中的相应方法 __get__()、__set__() 和 __delete__() 就会被调用。

在这个例子中,D 类中的 x 属性被装饰器 @MyProperty 应用了 MyProperty 描述符。因此,当 D 类的实例访问 x 属性时,就会调用 MyProperty 中的 __get__() 方法。当 x 属性被设置时,就会调用 MyProperty 中的 __set__() 方法。当 x 属性被删除时,就会调用 MyProperty 中的 __delete__() 方法。

getter()、setter() 和 deleter() 方法分别用于设置 fget、fset 和 fdel 属性,它们是描述符中的方法,通过这些方法,可以将一个普通的方法转化为描述符,使其能够被应用于类的属性上。

在这个例子中,D 类中的 x 属性定义了一个 getter 方法和一个 setter 方法,这些方法被应用于 MyProperty 描述符的 fget 和 fset 属性上。当 x 属性被访问时,就会调用 getter 方法,返回 _x 属性的值;当 x 属性被设置时,就会调用 setter 方法,将新的值存储到 _x 属性中;当 x 属性被删除时,就会调用 deleter 方法,删除 _x 属性。

在这个例子中,通过使用描述符,可以将 x 属性的访问、修改和删除操作都委托给了 MyProperty 描述符。这样可以对属性的访问、修改和删除进行统一的控制和处理,实现了更加灵活和可控的属性操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 04:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表