day24
类的成员之属性
1 class Foo(): 2 def bar(self): 3 print("bar") 4 5 @property 6 def per(self): 7 print('123') 8 return 1 9 10 obj = Foo() 11 obj.bar() 12 13 r = obj.per#实际上是方法,但通过字段的方式访问 14 print(r)
实际上是方法,但通过字段的方式访问。
执行结果:
bar 123 1 Process finished with exit code 0
@property,@per.setter,@per.deleter
1 class Foo(): 2 def __init__(self): 3 self.name = 'a' 4 5 def bar(self): 6 print("bar") 7 8 @property#获取 9 def per(self): 10 print('1234') 11 return 1 12 13 @per.setter#设置 14 def per(self, val): 15 print(val) 16 17 @per.deleter 18 def per(self): 19 print(666) 20 obj = Foo() 21 obj.bar() 22 23 r = obj.per#实际上是方法,但通过字段的方式访问,对应@property 24 print(r) 25 26 obj.per = 123#对应 @per.setter 27 del obj.per#对应 @per.deleter
执行结果:
bar 1234 1 123 666 Process finished with exit code 0
属性的另一种表达方式
1 class Foo: 2 3 def f1(self): 4 return 123 5 6 def f2(self,v): 7 print(v) 8 def f3(self): 9 print('del') 10 11 per = property(fget=f1,fset=f2,fdel=f3,doc='adfasdfasdfasdf') 12 13 # @property 14 # def per(self): 15 # return 123 16 17 18 obj = Foo() 19 ret = obj.per#对应与@property 20 print(ret) 21 22 obj.per = 123456#对应于@per.setter 23 24 del obj.per#对应于@per.deleter
property中最多写三个函数,doc为介绍。
Django中有用到以上方式。
执行结果:
123 123456 del Process finished with exit code 0