链条传动

砥砺前行,不忘初心!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
#!/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)

 

posted on 2016-11-07 13:53  链条君  阅读(229)  评论(0编辑  收藏  举报