class Pro:
    def __init__(self,func):
        self.func = func

    def __get__(self, instance, owner):
        return self.func(instance)



class Room:
    def __init__(self,name,width,length):
        self.name = name
        self.width = width
        self.length = length

    @Pro #area = Pro(area) 由与Pro是非数据描述符,所以这里就相当于给类的属性area做成了描述符,area.func = area这个函数
    def area(self):
        return self.width * self.length

r1 = Room('alex',12,2)
print(r1.area)  #执行r1.area时,会触发Pro描述符中的get方法,get方法执行的其实就是area方法传入的instance就是r1这个对象

 

class Pro:
    def __init__(self,func):
        self.func = func

    def __get__(self, instance, owner):
        if instance:
            res = self.func(instance)
            setattr(instance,self.func.__name__,res)
            return res
        else:
            return self



class Room:
    def __init__(self,name,width,length):
        self.name = name
        self.width = width
        self.length = length

    @Pro #area = Pro(area) 由与Pro是非数据描述符,所以这里就相当于给类的属性area做成了描述符,area.func = area这个函数
    def area(self):
        return self.width * self.length

    @classmethod
    def test(cls):
        pass

r1 = Room('alex',12,2)
print(r1.area)  #执行r1.area时,会触发Pro描述符中的get方法,get方法执行的其实就是area方法传入的instance就是r1这个对象
print(Room.area)

 

相关文章:

  • 2022-01-01
  • 2021-10-31
  • 2021-06-26
  • 2021-07-22
  • 2021-12-13
  • 2021-08-11
  • 2021-09-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-03-10
  • 2022-01-04
  • 2022-12-23
  • 2019-03-29
  • 2021-05-12
相关资源
相似解决方案