property的演示
Posted rxybk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了property的演示相关的知识,希望对你有一定的参考价值。
class Room: def __init__(self,name,length,width): self.name=name self.length=length self.width=width @property def test(self): return self.length*self.width f=Room("123",1,1) print(f.test) #1
@property 的方法可以输入return的内容 从而隐藏函数的逻辑
如果没有@property这个,那我我们调用应该是
print(s.test())这样子调用
自定义@property的方法
实际上@property方法==》函数名=property(函数名)
class testproperty: def __init__(self,func): self.func=func def __get__(self, instance, owner): print("--------") if instance==None: return self res=self.func(instance) #直接设置实例属性,待日后用到时不需要再次计算即可得到 setattr(instance,self.func.__name__,res) #这步是重点 return res ‘‘‘ 并没有__set__方法则实例大于非数据描述符 则会先调用实例属性 如果使用__set__方法那么数据描述符大于实例则在setattr中使用无效 ‘‘‘ class Room: def __init__(self,name,length,width): self.name=name self.length=length self.width=width @testproperty # test=testproperty(test) 和property效果一样 def test(self): return self.length*self.width s=Room("123",1,1) print(s.test)
好了上面就是property的原理。那么干什么用的?
就是如果在__get__中的逻辑复杂,那么使用这段代码
setattr(instance,self.func.__name__,res)
下次如果在次使用就不用通过上面继续使用复杂逻辑,
而直接使用上一次计算的值即可,提高速度
property的补充
class foo: @property def AAA(self): print("get的时候运行我") @AAA.setter def AAA(self,val): print("set的时候运行",val) @AAA.deleter def AAA(self): print("del的时候运行我") a=foo() a.AAA a.AAA=10 del a.AAA
#get的时候运行我
#set的时候运行 10
#del的时候运行我
另一种写法:
class foo: def get_AAA(self): print("get的时候运行我") def set_AAA(self,val): print("set的时候运行",val) def del_AAA(self): print("del的时候运行我") AAA=property(get_AAA,set_AAA,del_AAA) a=foo() a.AAA a.AAA=10 del a.AAA
实例演示:
这个是卖东西修改价格
class Test: def __init__(self): self.price=100 self.discount=0.8 @property def price1(self): res=self.price*self.zk return res @price1.setter def price1(self,val): self.price=val @price1.deleter def price1(self): del self.price s=Test() print(s.price1) s.price1=200 print(s.price1) del s.price1
以上是关于property的演示的主要内容,如果未能解决你的问题,请参考以下文章
Failed to convert property value of type ‘java.lang.String‘ to required type ‘int‘ for property(代码片段
Vue报错:Uncaught TypeError: Cannot assign to read only property 'exports' of object 的解决方法(代码片段