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
- Python速查笔记(3) 面向对象与异常处理
- Python面向对象7:异常处理
- 【学习笔记17】java面向对象-异常处理:捕获异常与抛出异常
- php面向对象笔记10 异常处理
- php面向对象笔记11 异常处理
- java学习笔记《面向对象编程》——异常处理
- 面向对象的程序设计学习笔记-27-异常处理
- Python 学习笔记(二):时间,函数,异常,面向对象
- 面向对象之异常处理
- 面向对象之异常处理
- python 面向对象笔记
- python面向对象笔记
- 黑马程序员_面向对象(3) 异常处理机制
- Python基础语法(3)——文件流、异常处理、面向对象编程以及装饰器
- Python笔记(3)异常处理
- python基础8:面向对象3、异常、模块
- java面向对象程序设计(五)-----异常处理
- 黑马程序员-面向对象-异常处理机制
- linux c 编程之二 列出ip段.
- linux c 编程之三 80banner 扫描器
- 设计文档[一]
- linux c 编程之四 way-board.cgi 漏洞扫描器
- linux c 编程之五 cal_make.pl 漏洞扫描器
- Python速查笔记(3) 面向对象与异常处理
- apache_openssl漏洞的利用及权限的提升
- unix系统攻克之后
- C的产生,特点,使用选择,与操作步骤概述
- Honeyd
- Hydrogen
- RxRichEdit中文支持BUG修正(1)
- Jabber
- 天使的优雅(摘自青年文摘20047)