#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 属性:具有方法的表现形式,又有字段的访问形式 ''' class Province: country = '中国' #静态字段 def __init__(self,name): self.name = name #普通字段 def show(self): print(self.name) #属性:普通方法上面添加@property #调用属性时就把属性当字段来使用(如:调用f3,---是xxx.f3而不是xxx.f3()) @property def f3(self): return self.name[1] #对象为f3属性赋值这种形式来进行调用,具体动作需要自己定义 @f3.setter def f3(self,value): self.value = value #赋值 #print(value) #删除属性f3这种表现形式来进行调用,具体工作自己定义 @f3.deleter def f3(self): del self.value #删除 #print('del f3') obj = Province('河南') # ret = obj.f3() #属性这样调用会报错 # print(ret) ret = obj.f3 #属性调用(方法当字段调用) print(ret) obj.f3 = 111 #为属性赋值的表现形式:会自动调用@f3.setter装饰的f3 print(obj.value) del obj.f3 #删除属性的表现形式:会自动调用@f3.deleter装饰的f3 print(obj.f3)
另一种属性使用方式
#!/usr/bin/env python # -*- coding: utf-8 -*- ''' 属性的另一种形式,这种比较常用 ''' class Foo: def __init__(self,name): self.name = name def f1(self): pass def f2(self,value): pass def f3(self): pass foo = property(fget=f1,fset=f2,fdel=f3) obj = Foo() ret = obj.foo #这种形式会调用f1(相当于@property) obj.foo = 111 #这种形式会调用f2(相当于@xx.setter) del obj.foo #这种形式会调用f3(相当于@xx.deleter)