zoukankan      html  css  js  c++  java
  • Python 面向对象2

    1.字段:

      静态字段:类字段,用类来访问,在代码加载的时候已经创建了。

      普通字段:对象字段,用对象来访问,在对象创建的时候才生成。

    2.方法:

      所有的方法都是属于类

      普通方法:至少一个self,由对象来访问

      静态方法:@staticmethod修饰,任意参数,由类来调用执行,跟对象没有关系

      类方法:@classmethod修饰,最少有一个参数cls,类方法比静态方法多了一个功能,就是把类名自动传递给cls

    3.属性:

      一个不伦不类的东西,具有方法的写法形式,具有字段的访问形式

    class Pager:
    
        def __init__(self,total_pager):
            self.total_pager = total_pager
    
        def div_page(self):
            a1,a2 = divmod(self.total_pager,10)
            if a2 == 0:
                return a1
            else:
                return a1+1
    
    
    p = Pager(102)
    ret = p.div_page()
    print (ret)

    执行结果:11

      假如我们要做一个分页,通过传统的方式,那么写成上面的样子,如果改成property的方式,那么调用的时候,执行的时候不需要加括号

    class Pager:
    
        def __init__(self,total_pager):
            self.total_pager = total_pager
    
        @property
        def div_page(self):
            a1,a2 = divmod(self.total_pager,10)
            if a2 == 0:
                return a1
            else:
                return a1+1
    
    
    p = Pager(102)
    ret = p.div_page
    print (ret)

    对于字段而言,我们可以通过p.total_pager来实现获取,也可以通过p.total_pager=103来设置,那么属性如何也通过这种方式来设置呢?

    class Pager:
    
        def __init__(self,total_pager):
            self.total_pager = total_pager
    
        @property
        def div_page(self):
            a1,a2 = divmod(self.total_pager,10)
            if a2 == 0:
                return a1
            else:
                return a1+1
    
        @div_page.setter
        def div_page(self,value):
            pass
    #
    p = Pager(102)
    # ret = p.div_page
    # print (ret)
    print (p.total_pager)
    p.total_pager = 103
    print (p.total_pager)
    p.div_page = 100

    执行的时候不会报没有attribute的错误

    同样的,对于字段我们可以执行删除操作,那么对于属性方法而言呢?

    class Pager:
    
        def __init__(self,total_pager):
            self.total_pager = total_pager
    
        @property
        def div_page(self):
            a1,a2 = divmod(self.total_pager,10)
            if a2 == 0:
                return a1
            else:
                return a1+1
    
        @div_page.setter
        def div_page(self,value):
            pass
        
        @div_page.deleter
        def div_page(self):
            pass
    
        def show(self):
            print ("HELLO")
    
    p = Pager(102)
    print (p.total_pager)
    p.total_pager = 103
    del p.total_pager
    del p.div_page
    p.show()
  • 相关阅读:
    [译]Vulkan教程(09)窗口表面
    [译]Vulkan教程(08)逻辑设备和队列
    [译]Vulkan教程(07)物理设备和队列家族
    Linux命令行文本工具
    go语言周边
    go第三方常用包
    Centos6安装gcc4.8及以上版本
    pyenv设置python多版本环境
    Redis慢日志
    PHP-CPP开发扩展(七)
  • 原文地址:https://www.cnblogs.com/python-study/p/5735128.html
Copyright © 2011-2022 走看看