yccjm2001 发表于 2023-3-27 11:04:11

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

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又是如何工作的?

isdkz 发表于 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 描述符。这样可以对属性的访问、修改和删除进行统一的控制和处理,实现了更加灵活和可控的属性操作。
页: [1]
查看完整版本: 求教各位大佬,函数间是如何关联调用,如何实现工作流程作用的?