zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Docker03-镜像
    Docker02:Centos7.6安装Docker
    Docker01-重要概念
    WEB开发新人指南
    Lpad()和Rpad()函数
    Unable to find the requested .Net Framework Data Provider. It may not be installed
    redis自动过期
    redis简单的读写
    redis的安装
    Ajax缓存,减少后台服务器压力
  • 原文地址:https://www.cnblogs.com/pangguoping/p/5617721.html
Copyright © 2011-2022 走看看