python自定制property(静态属性)
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)