Python速查笔记(3) 面向对象与异常处理

来源:互联网 发布:少女时代tiffany知乎 编辑:程序博客网 时间:2024/05/16 06:39

   现代编程语言,不能少了面向对象和异常捕捉,不过python有很多自己的东西(当然是跟java,C++比了)。Python有自己的垃圾收集机制,用不着费心去防止内存泄漏了,不过资源管理还是要操心的。

 四、面向对象
    1、类与对象
 
       class MyClass:
            pass

        方法(即成员函数:每个函数至少有一个参数self,指向该类的实例)
           
            初始化函数:(相当于构造函数)
                def __init__(self,argument,...):   
                    #不同于构造函数,对象构造后才第一个自动调用的。
                    #self相当于C++中的this指针,不过显式定义了,后面的是初始化参数
            析构函数(对象的引用为0时,自动调用)
                def __del__(self):
           
            独特功能的函数:(其实都是扩展类型的语法,让用户自定义语义。很多还未列出)
                __repr__(self)
                __str__(self)               #在print obj时返回的说明字符串
                __cmp__(self,other)         #实现比较操作符,使该对象可用><等
                __nozero__(self)            #实现该对象的逻辑值,if obj (可比if(NULL!=obj)含义扩展)
                __len__(self)               #实现长度计算,使len(obj)不抛异常
                __getitem__(self,key)       #模拟list,dictionary取值,如value=obj[key]
                __setitem__(self,key,value) #模拟list,dictionary设值,如obj[key]=value
                __delitem__(self,key)       #模拟 del obj[key]
                __getslice__(self,i,j)      #模拟 s = obj[1:]
                __setslice__(self,i,j,value)#模拟 obj[1:3] = [1,2]
                __delsclice__(self,i,j)     #模拟 del obj[1:3]
                 
        属性(即成员变量:每个类的两个实例对象可以有不同的属性,对于一个对象来说,可随时增加属性,也可随时用del删除一个属性)
           
            类变量(即C++的静态变量,可供任意该类实例来访问)
                class Aclass:
                    count = 0   #在类声明后定义的,不在类的方法中定义。
                访问方式:
                    Aclass.count        #
                   
                    Aclass a
                    a.count             #不同于Aclass.count
                    a.__class__.count   #同于Aclass.count
               
            对象变量
                __init__()中定义的变量,如下面的x,y
                    class Point:
                        def __init__(self, x = 0, y = 0):
                            self.x = x
                            self.y = y
                访问方式
                    p = Point(1,2)
                    p.x
                                           
        封装
            类的方法和属性是公有,还是私有,可以从它的名字判断。
            如果名字是以两个下划线开始,但并不是以两个下划线结束,则是私有的。其余的都是公有的。
           
        类的一些属性
            __name__属性返回类的名字,是一个字符串类型。
            __doc__属性是返回描述类的文档。
            __dict__属性是一个字典,包含着类的属性。
            __module__属性用于判断类属于哪个模块。Python支持跨模块类继承。
            __bases__属性反回子类的父类序列。
           
        对象的一些属性
            __class__表明实例是从哪一个类初始化来的。
            __dict__用字典存储实例的属性。
       
        Python中关于类的一些内置方法:
            issubclass(C2, C1)  #测试前一个类是否为后一个类的子类。它的两个参数必须是类。
            isinstance(obj1, C1)#测试一个对象是否为给定类的实例,它的第二个参数必须是类。
               
           
    2、继承与多态(支持多继承)
        class DerivedClass(BaseClass1, BaseClass2, ...):
            pass
        (方法和属性都可以继承,但子类的__doc__属性不能够继承父类的)
       
        函数重载(overload)
            同名的method,子类覆盖掉父类的。
        调用父类的方法
            BaseClass1.method(self, arguments)
        方法与属性的继承权限
            没有protected的说法,只有私有、私有
       
        子类的初始化__init__()要先显式地调用父类的BaseClass1.__init__(self, arguments)
       
        抽象类
            class AbstractClass:
                def AbstrctMethord(self):
                    raise NotImplementedError   #关键在这里

五、异常
 
   C++中的异常会引发堆栈展开,层层释放内存,直至该异常被捕捉处理,以消除内存泄漏。
    python中因有垃圾收集,可能方式会有不同,但大致相当吧。
    异常处理:
        方式1(Try-except形式):
            try :                             
                ...     # 异常可能发生的代码。               
            except ExceptionType1,ExceptionType2:
                ...     # 特定1,2异常发生时的捕捉处理              
            except ExceptionType3,ExceptionType4:
                ...     # 特定3,4异常发生时的捕捉处理               
            except:                           
                ...     # 所有未知异常的处理
            else:      
                ...     # 无异常时的处理
               
        方式2(Try-finally形式):
            try:
                ...     # 异常可能发生的代码。
            finally:       
                ...     # 不管是否有异常都要执行的语句,一般用于释放资源
       
    异常抛出:
        raise UserList(["error No:1 ","catcher: set"])
        raise MyError, "Hello world"    #抛出异常类、和标识异常的对象参数
       
        except UserList,arg:        #此异常的捕捉,UserLisat是可处理的异常类名,arg可处理的对象,此处为list对象
            for k in arg: print k
    异常接收参数格式如下:
        except Exception,Argument:
            Exception_handling
        except (Exception1,Exception2,...,ExceptionN),Argument:
            Exception_handling

原创粉丝点击