Python面向对象(类的成员之属性)

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
原文地址:https://www.cnblogs.com/112358nizhipeng/p/9825619.html