首页 > 技术文章 > python自定制property(静态属性)

xieys-1993 2019-09-26 18:04 原文

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)

 

推荐阅读