第二次作业

一.pyshon的面向对象

*类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。
*类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。
*数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。
*方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。
*实例变量:定义在方法中的变量,只作用于当前实例的类。
*对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。
*实例化:创建一个类的实例,类的具体对象。
*继承:即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

1.创建类
*使用class语句来创建一个新类,class之后为类的名称并以冒号结尾

class ClassName:
   '类的帮助信息'   #类文档字符串
   class_suite  #类体

2.创建实例对象
*实例化类其他编程语言中一般用关键字 new,但是在 Python 中并没有这个关键字,类的实例化类似函数调用方式。
使用类的名称 Employee 来实例化,并通过 init 方法接受参数。

"创建 Employee 类的第一个对象"
emp1 = Employee("Zara", 2000)
"创建 Employee 类的第二个对象"
emp2 = Employee("Manni", 5000)

3.访问属性

*您可以使用点(.)来访问对象的属性。使用如下类的名称访问类变量:
emp1.displayEmployee()
emp2.displayEmployee()
print "Total Employee %d" % Employee.empCount

4.类的继承
*面向对象的编程带来的主要好处之一是代码的重用,实现这种重用的方法之一是通过继承机制。继承完全可以理解成类之间的类型和子类型关系。

1:在继承中基类的构造(init()方法)不会被自动调用,它需要在其派生类的构造中亲自专门调用。
2:在调用基类的方法时,需要加上基类的类名前缀,且需要带上self参数变量。区别于在类中调用普通函数时并不需要带上self参数
3:Python总是首先查找对应类型的方法,如果它不能在派生类中找到对应的方法,它才开始到基类中逐个查找。(先在本类中查找调用的方法,找不到才去基类中找)。
如果在继承元组中列了一个以上的类,那么它就被称作"多重继承" 。

语法:
*派生类的声明,与他们的父类类似,继承的基类列表跟在类名之后

class SubClassName (ParentClass1[, ParentClass2, ...]):
   'Optional class documentation string'
   class_suite

5.方法重写
*如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class Parent:        # 定义父类
   def myMethod(self):
      print '调用父类方法'
 
class Child(Parent): # 定义子类
   def myMethod(self):
      print '调用子类方法'
 
c = Child()          # 子类实例
c.myMethod()         # 子类调用重写方法

输出结果为:调用子类方法

二.异常处理

1.什么是异常?
*异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。
*一般情况下,在Python无法正常处理程序时就会发生一个异常。
*异常是Python对象,表示一个错误。
*当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行。

2.异常处理
*捕捉异常可以使用try/except语句。
*try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。
*如果你不想在异常发生时结束你的程序,只需在try里捕获它。

一个作比较例子,它打开一个文件,在该文件中的内容写入内容,且并未发生异常:

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

程序输出结果:
$ python test.py
内容写入文件成功
$ cat testfile
这是一个测试文件,用于测试异常!!

try:
    fh = open("testfile", "w")
    fh.write("这是一个测试文件,用于测试异常!!")
except IOError:
    print "Error: 没有找到文件或读取文件失败"
else:
    print "内容写入文件成功"
    fh.close()

程序输出结果:
$ python test.py
Error: 没有找到文件或读取文件失败

第三方模块

1.Python 模块
*Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
*模块让你能够有逻辑地组织你的 Python 代码段。
*把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
*模块能定义函数,类和变量,模块里也能包含可执行的代码。

例子
support.py 模块:

def print_func( par ):
   print "Hello : ", par
   return

2.import 语句
*模块的引入
*模块定义好后,我们可以使用 import 语句来引入模块

import module1[, module2[,... moduleN]

*当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。
*搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support.py,需要把命令放在脚本的顶端:

test.py 文件代码:
 
# 导入模块
import support
 
# 现在可以调用模块里包含的函数了
support.print_func("Runoob")

输出结果:
Hello : Runoob

*一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

3.From…import 语句
Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中。

from modname import name1[, name2[, ... nameN]]

3,globals() 和 locals() 函数
*根据调用地方的不同,globals() 和 locals() 函数可被用来返回全局和局部命名空间里的名字。
*如果在函数内部调用 locals(),返回的是所有能在该函数里访问的命名。
*如果在函数内部调用 globals(),返回的是所有在该函数里能访问的全局名字。
*两个函数的返回类型都是字典。所以名字们能用 keys() 函数摘取。

posted @ 2017-10-26 11:16  孙耀威  阅读(147)  评论(0编辑  收藏  举报