python异常处理和面向对象编程总结

    异常处理和面向对象编程,是python编程中,比较重要的基础。在实际生产编程设计和开发中,异常处理和面向读象都是必须在设计和开发过程中充分考虑的。
    对于python开发和面向对象这两部分基础,用一个python程序进行封装说明,结果如下:


点击(此处)折叠或打开

  1. #!/usr/bin/env python
  2. # _*_ coding:utf-8 _*_

  3. #################
  4. #异常处理
  5. #################
  6. print '''
  7. 异常处理是用于处理软件或信息系统中出现的异常状况的一种机制,及超出程序正常执行流程的某些特殊条件。
  8. 在当前主流的编程语言的错误处理机制中,异常处理逐步替代了error code错误的处理方式,异常处理分离了接收和处理错误代码。
  9. 这个功能理清编程思路,使代码的可读性增强,方便维护者阅读和理解。
  10. '''
  11. print
  12. print '''
  13. 异常处理,有称错误处理,提供了程序运行时出现的任何意外或异常情况的方法。
  14. python异常处理使用try,catch,else,finally等关键字来尝试可能未成功的操作,处理失败及正常情况,在事后清理资源。
  15. python异常捕捉及处理的语法如下:
  16. #可能会发生异常的程序块
  17. try:
  18.             block_try
  19. #第1种except形式
  20. except Exception1:
  21.             block_when_exception1_happen

  22. #第2种except形式
  23. except (Exception2, Exception3, Exception4):
  24.             block_when_exception2_or_3_or_4_happen

  25. #第3种except形式
  26. except Exception5, variance
  27.     block_when_exception5_happen

  28. #第4种except形式
  29. except (Exception6, Exception7),variance
  30.     block_when_exception6_or_7_happen

  31. #第5种except形式
  32. except:
  33.             blok_for_all_other_exceptions

  34. #当没有出现异常情况时的处理
  35. else:
  36.             block_for_no_exceptions
  37.     
  38. #无论是否出现异常,最后要做的处理
  39. finally:
  40.             block_anyway
  41. '''
  42. print
  43. print '''
  44. 异常处理规则分为四部分:
  45.     可能产生异常的代码,写在try块中,try块中发生异常,则try块剩余的代码被终止;
  46.     异常判断和发生时的代码,写在except中,具有有5种形式:
  47.     1是一种异常发生时,执行except块内代码;2是捕获多种异常,执行代码;3是捕获的异常可以转换为变量;4是捕获多种异常转换为变量;5是捕获任何异常;
  48.     每种except捕获形式,都可以定义多次,系统会逐个检查,但有一个满足条件时,执行except块,其他的不再检查和执行,类似于多个if-else条件;
  49.     else是可选模块,定义如果没有发生异常时,需要做的处理;
  50.     finally是可选模块,无论try模块是否发生异常,都会执行这里的代码;
  51. 总结一下,try模块是程序对象,except是异常捕获提交及应对,else是没有异常时的处理,finally是最后必定执行的内容,与是否出现异常无关。
  52. '''
  53. print
  54. #简单异常处理示例
  55. try:
  56.     result = 3/0
  57.     print "This is never been called"
  58. except:
  59.     print "Exception happened"
  60. finally:
  61.     print "Process finished!"
  62.     
  63. #多个except异常捕获模块的示例
  64. try:
  65.     myList = [4, 6]
  66.     print myList[10]
  67.     print "This is never been called"
  68. except ZeroDivisionError, e:
  69.     print "ZeroDivisionError happened"
  70.     print e
  71. except (IndexError, EOFError), e:
  72.     print "Exception happened"
  73.     print e
  74. except :
  75.     print "Unkown exception happened"
  76. else:
  77.     print "No exception happened!"
  78. finally:
  79.     print "Process finished!"
  80.     
  81.     
  82. print
  83. print '''
  84. 除了系统预定义的异常,还可以定义自己的特定逻辑异常。
  85. 自己定义异常,建立一个继承系统异常的子类,并且在需要引发该异常时用raise语句抛出该异常。
  86. '''
  87. #自定义异常示例
  88. import sys
  89. class MyError(Exception):
  90.     def __str__(self):
  91.         return " I'm a self-defined Error! "
  92.     
  93. def main_except():
  94.     try:
  95.         print "**********Start of main()**********"
  96.         if len(sys.argv) == 1:
  97.             raise MyError()
  98.         print "**********End of main()**********"
  99.     except MyError, e:
  100.         print e

  101. main_except()


  102. #################
  103. #面向对象编程
  104. #################
  105. print
  106. print '''
  107. 面向读象编程,与面向过程编程,函数式编程的特点是:
  108.     面向过程:根据业务逻辑从上到下写垒代码
  109.     函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
  110.     面向对象:对函数进行分类和封装,让开发“更快更好更强...”
  111. 面向对象编程是一种编程方式,此编程方式的落地需要使用 “类” 和 “对象” 来实现,所以,面向对象编程其实就是对 “类” 和 “对象” 的使用。
  112.   类就是一个模板,模板里可以包含多个函数,函数里实现一些功能
  113.   对象则是根据模板创建的实例,通过实例对象可以执行类中的函数
  114. 面向对象的三大特性是指:封装、继承和多态。
  115. '''
  116. print
  117. print '''
  118. 面向对象是中程序设计规范,也是一种程序开发方法。python即可支持函数式编程,又可以支持面向对象编程,面向对象编程可以实现函数式编程的功能,函数式编程则不一定。
  119. 一般能够使用面向对象编程,就尽量使用面向对象编程来实现。有的高级函数,如C#和Java只支持面向对象编程,不支持函数式编程。
  120. 面向对象,对象是指类的实例,类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程,也叫作类的实例化。
  121. 面向对象编程中的主要概念有:
  122.     类 class:定义了一个事物抽象的特点。类定义了事物的属性和它可以做到的行为,一个类中可以有成员函数和成员变量,在面向读象中,成员函数叫方法,成员变量叫属性;
  123.     对象 object:是类的实例,每个类可以有若干个被实例化的对象。在OS中,熊给读象分配内存,不会给类分配内存;
  124.     继承 inheritance:是指通过一个已有的类(父类)定义另外一个类(子类),子类共享父类开放的属性和方法。子类的对象是一个子类的实例,还是父类的一个实例。
  125.     封装性 encapsulation:封装性是指在定义时,可以将不能或不需要其他类知道的成员定义成私有成员,而只公开需要使用的成员,以达到信息隐藏和简化的作用。
  126.     多态性 polymorphism:是指同一方法作用于不同的读象,可以有不同的解释,产生不同的执行结果,在实现上,多态性是孕妇开发者将父对象的变量设置为对子对象的引用,赋值之后,父对象变量就可以根据当前的赋值给子对象的特性以不同方式运作。

  127. 随着面向对象编程OOP的普及,面向对象涉及OOD也逐渐成熟,形成了以UML为代表的标准建模语言。
  128. UML是一个支持模型化和软件系统开发的图形化语言,为软件开发所有阶段提供了模型化和可视化支持,包括有需求分析到规格,再到构造和配置的所有阶段。
  129. '''
  130. print
  131. print "类和读象是面向对象编程的基础,通过在类名后面加小括号可以直接实例化类来获得读象变量,使用对象变量可以访问成员函数和成员变量。在构造函数中不能有返回值。"
  132. #定义一个类
  133. class MyClass(object):
  134.     message = "Hello, Developer."
  135.     
  136.     def show(self):
  137.         print self.message

  138. print MyClass.message
  139. MyClass.message = "Good Morning!"
  140. print MyClass.message
  141. inst = MyClass()
  142. inst.show()

  143. print
  144. print "构造函数是一种特殊的类成员方法,主要用来在创建对象时,初始化对象,为对象成员赋初始值。python中构造函数用 __init__命名,为类添加一个构造方法,实例一个对象。"
  145. #定义类,增加构造函数示例
  146. class MyClass(object):
  147.     message = 'Hello, Developer.'
  148.     
  149.     def show(self):
  150.         print self.message
  151.         
  152.     def _init__(self):
  153.         print "Constructor is called"

  154. inst = MyClass()
  155. inst.show()

  156. #用默认参数的方式,实现多种方式构造对象
  157. class MyClass(object):
  158.     message = "Hello, Developer."
  159.     
  160.     def show(self):
  161.         print self.message
  162.     
  163.     def __init__(self, name = "unset", color = "black"):
  164.         print "Constructor is called with params: ", name, " ", color
  165.     
  166. inst = MyClass()
  167. inst.show()

  168. inst2 = MyClass("David")
  169. inst2.show()

  170. inst3 = MyClass("Lisa", "Yellow")
  171. inst3.show()

  172. inst4 = MyClass(color = "Green")
  173. inst4.show()


  174. print
  175. print '''
  176. 析构函数,是构造函数的反向函数,在销毁释放对象时,调用析构函数。析构函数往往做清理善后工作,例如数据库连接,可以用析构函数是否对数据库资源的占用。
  177. python中为类定义析构函数的方法是在类中定义一个 __del__ 的没有返回值和参数的函数。
  178. 与Java类似,python解释器的堆中存储这正在运行程序锁建立的对象,不需要形式释放;如果需要显示销毁对象,就使用del关键字。
  179. '''
  180. #创建类,调用析构函数示例
  181. class MyClass(object):
  182.     message = 'Hello, Developer.'
  183.     
  184.     def show(self):
  185.         print self.message
  186.     
  187.     def __init__(self, name = 'unset', color = "black"):
  188.         print "Constructor is called with params: ", name, " ", color
  189.     
  190.     def __del__(self):
  191.         print "Destructor is called!"
  192.     
  193. inst = MyClass()
  194. inst.show()

  195. inst2 = MyClass("David")
  196. inst2.show()

  197. del inst, inst2

  198. inst3 = MyClass("Lisa", "Yellow")
  199. inst3.show()

  200. del inst3

  201. print
  202. print "类中有共享成员变量,如上面类中的message。如果要定义每个对象自己的成员变量,就要在构造函数中定义self引用的变量,即实例成员变量。"
  203. #实例成员变量示例
  204. class MyClass(object):
  205.     message = "Hello, Developer."
  206.     
  207.     def show(self):
  208.         print self.message
  209.         print "Here is %s in %s!" % (self.name, self.color)
  210.     
  211.     def __init__(self, name = "unset", color = "black"):
  212.         print "Constructor is called with params : ", name, " ", color
  213.         self.name = name
  214.         self.color = color
  215.     
  216.     def __del__(self):
  217.         print "Destructor is called for %s!" % self.name
  218.     
  219. inst2 = MyClass("David")
  220. inst2.show()
  221. print "Color of inst2 is ", inst2.color, "\n"

  222. inst3 = MyClass("Lisa", "Yellow")
  223. inst3.show()
  224. print "Name of inst3 is ", inst3.name, "\n"

  225. del inst2, inst3


  226. print '''
  227. 访问类时,类成员函数与实例绑定,只能通过对象访问而不能通过类名访问。
  228. python中支持两种基于类名访问成员的函数:静态函数和类函数,它们的不同点是类函数有一个隐形参数cls可以用来获取类信息,而静态函数没有改参数。
  229. 静态函数使用装饰器@staticmethod定义,类函数使用 装饰器@classmethod 定义。
  230. '''
  231. #静态函数和类函数的代码示例
  232. class MyClass(object):
  233.     message = "Hello, Developer."
  234.     
  235.     def show(self):
  236.         print self.message
  237.         print "Here is %s in %s !" % (self.name, self.color)
  238.     
  239.     @staticmethod
  240.     def printMessage():
  241.         print "print Message is called"
  242.         print MyClass.message
  243.     
  244.     @classmethod
  245.     def createObj(cls, name, color):
  246.         print "Object will be created: %s(%s, %s)" % (cls.__name__, name, color)
  247.         return cls(name, color)
  248.     
  249.     def __init__(self, name = "unset", color = "black" ):
  250.         print "Constructor is called with params: ", name, " ", color
  251.         self.name = name
  252.         self.color = color
  253.         
  254.     def __del__(self):
  255.         print "Destructor is called for %s !" % self.name
  256.         
  257. MyClass.printMessage()

  258. inst = MyClass.createObj("Toby", "Red")
  259. print inst.message
  260. del inst

  261. print
  262. print '''
  263. 封装性,是面向读象编程的重要特点,python也提供了不让外部看到成员吟唱起来的私有成员机制。
  264. 但与大多数编程语言用public,private关键字表达可见范围的方法不同,python指定变量名格式的方法定义私有成员,以双下划线__开始命名的成员都是是有成员变量。
  265. '''
  266. #封装,私有成员示例代码
  267. class MyClass(object):
  268.     def __init__(self, name = "unset", color = "black"):
  269.         print "Constructor is called with params: ", name, " ", color
  270.         self.__name = name
  271.         self.__color = color
  272.     
  273.     def __del__(self):
  274.         print "Destructor is called for %s!" % self.__name
  275.     
  276. inst = MyClass("Jojo", "White")
  277. del inst

  278. print '''
  279. 继承,类之间的继承是面向对象设计的重要方法,通过继承可以简化代码和优化设计模式。
  280. python类在定义时,可以在小括号中指定基类,所有python类都是object类型的子类,语法如下:
  281. class BaseClass(object): #父类定义
  282.     block_class
  283.     
  284. class SubClass(BaseClass): #子类定义
  285.     block_class

  286. 子类除了具备自己的 block_class 中定义的特性,还从父类继承了非私有特性。
  287. 在子类的析构函数中调用基类的析构函数,是一种比较好的方法,但这样可能导致父类资源不能如期被释放。
  288. '''
  289. #继承,子类继承父类示例
  290. class Base(object):
  291.     def __init__(self):
  292.         print "Constructor fo Base is called !"
  293.     
  294.     def __del__(self):
  295.         print "Destructor of Base is called !"
  296.     
  297.     def move(self):
  298.         print "move called in Base !"
  299.     
  300. class SubA(Base):
  301.     def __init__(self):
  302.         print "Constructor of subA is called ! "
  303.     
  304.     def move(self):
  305.         print "move called in subA ! "
  306.         
  307. class SubB(Base):
  308.     def __del__(self):
  309.         print "Destructor of SubB is called ! "
  310.         super(SubB, self).__del__()
  311.     
  312. instA = SubA()
  313. instA.move()
  314. del instA

  315. print "-----------------------"
  316. instB = SubB()
  317. instB.move()
  318. del instB

  319. print
  320. print "python中允许类的多继承,也就是一个子类可以有多个基类。"
  321. #一个子类,继承多个父类示例
  322. class BaseA(object):
  323.     def move(self):
  324.         print "move called in BaseA ! "
  325.     
  326. class BaseB(object):
  327.     def move(self):
  328.         print "move called in BaseB ! "

  329. class BaseC(BaseA):
  330.     def move(self):
  331.         print "move called in BaseC ! "
  332.     
  333. class Sub(BaseC, BaseB):
  334.     pass
  335.     
  336. inst = Sub()
  337. inst.move()


    该脚本执行结果如下:


点击(此处)折叠或打开

  1. # python try.py

  2. 异常处理是用于处理软件或信息系统中出现的异常状况的一种机制,及超出程序正常执行流程的某些特殊条件。
  3. 在当前主流的编程语言的错误处理机制中,异常处理逐步替代了error code错误的处理方式,异常处理分离了接收和处理错误代码。
  4. 这个功能理清编程思路,使代码的可读性增强,方便维护者阅读和理解。



  5. 异常处理,有称错误处理,提供了程序运行时出现的任何意外或异常情况的方法。
  6. python异常处理使用try,catch,else,finally等关键字来尝试可能未成功的操作,处理失败及正常情况,在事后清理资源。
  7. python异常捕捉及处理的语法如下:
  8. #可能会发生异常的程序块
  9. try:
  10.             block_try
  11. #第1种except形式
  12. except Exception1:
  13.             block_when_exception1_happen

  14. #第2种except形式
  15. except (Exception2, Exception3, Exception4):
  16.             block_when_exception2_or_3_or_4_happen

  17. #第3种except形式
  18. except Exception5, variance
  19.     block_when_exception5_happen

  20. #第4种except形式
  21. except (Exception6, Exception7),variance
  22.     block_when_exception6_or_7_happen

  23. #第5种except形式
  24. except:
  25.             blok_for_all_other_exceptions

  26. #当没有出现异常情况时的处理
  27. else:
  28.             block_for_no_exceptions
  29.     
  30. #无论是否出现异常,最后要做的处理
  31. finally:
  32.             block_anyway



  33. 异常处理规则分为四部分:
  34.     可能产生异常的代码,写在try块中,try块中发生异常,则try块剩余的代码被终止;
  35.     异常判断和发生时的代码,写在except中,具有有5种形式:
  36.     1是一种异常发生时,执行except块内代码;2是捕获多种异常,执行代码;3是捕获的异常可以转换为变量;4是捕获多种异常转换为变量;5是捕获任何异常;
  37.     每种except捕获形式,都可以定义多次,系统会逐个检查,但有一个满足条件时,执行except块,其他的不再检查和执行,类似于多个if-else条件;
  38.     else是可选模块,定义如果没有发生异常时,需要做的处理;
  39.     finally是可选模块,无论try模块是否发生异常,都会执行这里的代码;
  40. 总结一下,try模块是程序对象,except是异常捕获提交及应对,else是没有异常时的处理,finally是最后必定执行的内容,与是否出现异常无关。


  41. Exception happened
  42. Process
  43. Exception happened
  44. list index out of range
  45. Process


  46. 除了系统预定义的异常,还可以定义自己的特定逻辑异常。
  47. 自己定义异常,建立一个继承系统异常的子类,并且在需要引发该异常时用raise语句抛出该异常。

  48. **********Start of main()**********
  49.  I



来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24638123/viewspace-2135220/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/24638123/viewspace-2135220/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值