python - 类的属性

类的属性

属性的基本使用

属性的定义和调用需要注意以下几点:

属性存在的意义:访问属性时,可以制造出和访问字段完全相同的假象,由于属性是由方法变种而来,如果python中没有属性,完全可以由方法来替代.

属性的两种定义方式

python3中全都是新式类,有三种@property装饰方式:

  • @property
  • 方法名.setter
  • 方法名.deleter

其实就像上面的例子.

还有一种方式是静态字段方式.创建值为property的对象的静态字段.
来看个例子:

class Pager:
    def __init__(self,name):
        self.name=name

    def f1(self):
        return 123

    def f2(self,value):
        print(value)

    def f3(self):
        print('del....')

    foo=property(fget=f1,fset=f2,fdel=f3)

obj=Pager(110)
ret=obj.foo #调用fget
print(ret)

obj.foo=778 #调用fset

del obj.foo #调用fdel

out:

123
778
del....

其中fget,fset,fdel为默认参数.

class Pager:
    def __init__(self,all_count):
        self.all_count = all_count
    def f1(self):
        return 123
    def f2(self,value):
        self.value = value
        print(self.value)
    def f3(self):
        pass

    foo = property(fget=f1,fset=f2,fdel=f3)
p = Pager(101)
#获取属性的值,默认会调用fget
result = p.foo
print(result)

#修改属性的值,默认会调用fset
p.foo = "alex"

# 删除属性的值,默认会调用fdel
del p.foo

out:

123
alex

1.创建类的属性

使用@property装饰器来创建

class Pager:
    def __init__(self,all_count):
        self.all_count = all_count
    @property
    def all_pager(self):
        a1,a2 = divmod(self.all_count,10)
        if a2 == 0:
            return a1
        else:
            return a1+1

 

2.获取类的属性

class Pager:
    def __init__(self,all_count):
        self.all_count = all_count

    @property
    def all_pager(self):
        a1,a2 = divmod(self.all_count,10)
        if a2 == 0:
            return a1
        else:
            return a1+1

p = Pager(101)
ret = p.all_pager
print(ret)

out :

11

3、设置类的属性

使用装饰器 @all_pager.setter  然后使用 p.all_pager = 111 修改属性的值

class Pager:
    def __init__(self,all_count):
        self.all_count = all_count
    @property
    def all_pager(self):
        a1,a2 = divmod(self.all_count,10)
        if a2 == 0:
            return a1
        else:
            return a1+1
    @all_pager.setter
    def all_pager(self,value):
        print(value)

p = Pager(101)
p.all_pager = 111

out :

111

 4、删除属性

使用@all_pager.deleter 和 del p.all_pager

class Pager:
    def __init__(self,all_count):
        self.all_count = all_count
    @property
    def all_pager(self):
        a1,a2 = divmod(self.all_count,10)
        if a2 == 0:
            return a1
        else:
            return a1+1
    
    @all_pager.deleter
    def all_pager(self):
        print('del all_pager')

p = Pager(101)

del p.all_pager

out:

del all_pager

posted @ 2016-06-26 13:26  unixfbi.com  阅读(301)  评论(0编辑  收藏  举报