zoukankan      html  css  js  c++  java
  • Python(八)-面对对象编程扩展

    第一章 、面向对象扩展内容

    1.1抽象接口

      描述:创建基类,即抽象接口是为了来实现一个程序的架子,完成一系列的功能,然后具体的内容让子类来完成,如果不能完成,那么在调用的时候会直接报错。

      作用:一般用来构建程序的一些架子,然后进行多人协作开发。

      实践:

       python2

    #/usr/bin/env python
    #-*- encodeing:utf-8 -*-
    import abc       #模块必须掉入
    class Alert(object):    #创建一个基类
        __metaclass__ = abc.ABCMeta    #语法
        @abc.abstractmethod     #装饰下面的方法为抽象方法
        def send(self):       #需要实现方法
            pass  
    
    class MailAlert(Alert):     #子类继承基类
        pass          #如果不实现
    m = MailAlert()  #python2中在实例化中就会报异常
    m.send    
    
    错报信息:
    Traceback (most recent call last):
      File "抽象类_python2.py", line 12, in <module>
        m = MailAlert()
    TypeError: Can't instantiate abstract class MailAlert with abstract methods send

        python3

    #/usr/bin/env python3
    class Alert(object):
        def send(self):
            raise NotImplementedError   #给这个send方法添加一个报错信息。
    class MailAlert(Alert):
        pass
    
    m = MailAlert()
    m.send()
    
    报错信息:
    Traceback (most recent call last):
      File "/Users/chenxin/s15/day8/抽象类_python3.py", line 12, in <module>
        m.send()
      File "/Users/chenxin/s15/day8/抽象类_python3.py", line 6, in send
        raise NotImplementedError   #给这个send方法添加一个报错信息。
    NotImplementedError

    1.2 静态方法

      描      述:静态方法不用实例化就可以调用,直接用类名像调用变量一样,静态方法就是已经和类没什么关系了,唯一的关系就是使用类名进行调用它。

      作      用:每一次实例化都会开辟一块内存空间,有内存的开销,如果有上万的实例,就会耗费大量的实例,就要思考要不要用这个静态方法,进行剩内存空间。

      使用方法:在类中的方法上进行@staticmethod的装饰器。

      特     点:静态方法既不能访问公有属性,也不能访问实例属性。

      实     例:

    class cc(object):
        def __init__(self,name):
            self.name = name
        @staticmethod
        def ect(name,food):
            print('%s is eating ..%s.'%(name,food))
    p= cc('陈鑫')
    p.ect('chenxin','鸡腿')
    
    结果:
        chenxin is eating ..鸡腿.

    1.3 类方法

      描     述:在类方法来讲,它就不知道实例的存在

      作     用:

      使用方法:在类中的方法上进行@classmethod的装饰器。

      特     点:只能访问类的公有属性,不能访问实例属性

      实     例:

    class cc(object):
        name = '晶晶'
        def __init__(self,name):
            self.name = name
        @classmethod
        def walk(self):
            print('%s is walking/....' %self.name)
    p= cc('陈鑫')
    p.walk()
    
    结果:
        晶晶 is walking/....

    1.4 属性方法

      描     述:

      作     用:把一个方法变成一个静态属性,就是变成一个变量,此时给人感知是访问的一个变量,其实访问的是一个方法。

      使用方法:在类中的方法上进行@propery的装饰器,如果修改的方法是在创建一个相同名字的方法,在上装饰@属性方法.settr,删除为@属性方法.deleter

      特     点:这样就如果带括号,就是调用的下面方法,如果不带括号就是调用的属性方法。

      实     例:

    class cc(object):
        def __init__(self,name):
            self.name = name
        @property   #属性方法,的作用是吧一个方法变成一个静态属性,就是变成一个变量。此时你访问的是一个变量,其实访问的是一个方法。
        def talk(self):
            print('%s says '%(self.name))
        @talk.setter
        def talk(self,msg):
            print('set msg:',msg)
        @talk.deleter
        def talk(self):
            print('deleter talk')
    调用:
    p = cc('chenxin')
    p.talk
    p.talk = 'jjj'
    del p.talk
    
    结果:
        chenxin says 
        set msg: jjj
        deleter talk

    第二章 、面向对象更多方法

    1.1  __doc__

      描    述:显示方法的描述信息

      实    例:

    def testfun():
        """
    this function do nothing , just demostrate the use of the doc string .
    """
        pass
    
    print(testfun.__doc__)

    1.2  __module__

      描    述:以字符串的形式显示模块与import结合使用

    1.3 __import__

      描    述:以字符串的形式导入模块

    1.4 __call__

      描述:

    1.5 __dict__

      描    述:查看类或对象中所有成员 

    1.6 __metaclass__

      描    述:自定义整个类的实例化的过程。

    1.7 type()

      描    述:动态创建类,所有的类底层都是type创建的。

        

  • 相关阅读:
    [Linux]软件目录
    [Linux]查看Linux内核及发行版本
    [S7706]华为ACL
    [S7706]华为配置DHCP
    QML-密码管理器
    QML-AES加解密小工具
    LaTex中文article模板(支持代码、数学、TikZ)
    Memo-Tech
    VIM学习笔记
    CodeForces 674C Levels and Regions
  • 原文地址:https://www.cnblogs.com/cxcx/p/6137150.html
Copyright © 2011-2022 走看看