七、面向对象编程

  python支持面向对象编程;类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例。

  对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。

  域有两种类型--属于实例的或属于类本身;它们分别被称为实例变量和类变量。

  类使用关键字class创建,类的域和方法被列在一个缩进块中。

  类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似C#中的this。

class Animal:pass #empty block

  __init__方法  在类的一个对象被创建时调用该方法;相当于c++中的构造函数。

  __del__方法  在类的对象被销毁时调用该方法;相当于c++中的析构函数。在使用del删除一个对象时也就调用__del__方法。

  Python中所有的类成员(包括数据成员)都是public的;只有一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。

class Person:Count = 0def __init__(self, name, age):Person.Count += 1self.name = nameself.__age = agep = Person("peter", 25)
p1 = Person("john", 20)print Person.Count #2
print p.name #peter
print p.__age #AttributeError: Person instance has no attribute '__age'

  继承:为了使用继承,基类的名称作为一个元组跟在类名称的后面;python支持多重继承。下面是一个关于继承的例子:

 1 class SchoolMember:
 2     '''Represent any school member.'''
 3     def __init__(self, name, age):
 4         self.name = name
 5         self.age = age
 6         print "Initializing a school member."
 7
 8     def tell(self):
 9         '''Tell my details'''
10         print "Name: %s, Age: %s, " % (self.name, self.age),
11
12 class Teacher(SchoolMember):
13     '''Represent a teacher.'''
14     def __init__(self, name, age, salary):
15         SchoolMember.__init__(self, name, age)
16         self.salary = salary
17         print "Initializing a teacher"
18
19     def tell(self):
20         SchoolMember.tell(self)
21         print "Salary: %d" % self.salary
22
23 class Student(SchoolMember):
24     '''Represent a student.'''
25     def __init__(self, name, age, marks):
26         SchoolMember.__init__(self, name, age)
27         self.marks = marks
28         print "Initializing a student"
29
30     def tell(self):
31         SchoolMember.tell(self)
32         print "Marks: %d" % self.marks
33
34 print SchoolMember.__doc__
35 print Teacher.__doc__
36 print Student.__doc__
37
38 t = Teacher("Mr. Li", 30, 9000)
39 s = Student("Peter", 25, 90)
40
41 members = [t, s]
42
43 for m in members:
44     m.tell()

  程序输出如下:

Represent any school member.
Represent a teacher.
Represent a student.
Initializing a school member.
Initializing a teacher
Initializing a school member.
Initializing a student
Name: Mr. Li, Age: 30,  Salary: 9000
Name: Peter, Age: 25,  Marks: 90

八、输入/输出

  程序与用户的交互需要使用输入/输出,主要包括控制台和文件;对于控制台可以使用raw_input和print,也可使用str类。raw_input(xxx)输入xxx然后读取用户的输入并返回。

  1. 文件输入/输出

    可以使用file类打开一个文件,使用file的read、readline和write来恰当的读写文件。对文件读写能力取决于打开文件时使用的模式,常用模式

  有读模式("r")、写模式("w")、追加模式("a"),文件操作之后需要调用close方法来关闭文件。

 1 test = '''\
 2 This is a program about file I/O.
 3
 4 Author: Peter Zhange
 5 Date: 2011/12/25
 6 '''
 7
 8 f = file("test.txt", "w") # open for writing, the file will be created if the file doesn't exist
 9 f.write(test) # write text to file
10 f.close() # close the file
11
12 f = file("test.txt") # if no mode is specified, the default mode is readonly.
13
14 while True:
15     line = f.readline()
16     if len(line) == 0:  # zero length indicates the EOF of the file
17         break
18     print line,
19
20 f.close()

  2. 存储器

    python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。

import cPickledatafile = "data.data"namelist = ["peter", "john", "king"]f = file(datafile, "w")
cPickle.dump(namelist, f)
f.close()del namelistf = file(datafile)
storednamelist = cPickle.load(f)print storednamelist
#['peter', 'john', 'king']

九、异常

  当程序中出现某些异常的状况时,异常就发生了。python中可以使用try ... except 处理。

try:print 1/0
except ZeroDivisionError, e:print e
except:print "error or exception occurred."#integer division or modulo by zero

  可以让try ... except 关联上一个else,当没有异常时则执行else。

  我们可以定义自己的异常类,需要继承Error或Exception。

class ShortInputException(Exception):'''A user-defined exception class'''def __init__(self, length, atleast):Exception.__init__(self)self.length = lengthself.atleast = atleasttry:s = raw_input("enter someting-->")if len(s) < 3:raise ShortInputException(len(s), 3)
except EOFError:print "why you input an EOF?"
except ShortInputException, ex:print "The lenght of input is %d, was expecting at the least %d" % (ex.length, ex.atleast)
else:print "no exception"
#The lenght of input is 1, was expecting at the least 3

  try...finally

try:f = file("test.txt")while True:line = f.readline()if len(line) == 0:breaktime.sleep(2)print line,
finally:f.close()print "Cleaning up..."

Python 基础语法(三)相关推荐

  1. python:python基础语法三,列表、元组、字典、集合

    python基础语法 文章目录 python基础语法 列表(list) 列表简介 切片 列表修改元素 列表的方法 遍历列表 序列(sequence) 序列的基本操作 range()函数 EMS(Emp ...

  2. Python基础语法-三种函数特殊形参定义以及使用方式

    函数的基础定义和使用 函数使用必须在函数声明之后. 注意形参的作用域只限于函数体内部 每个函数在python中都有返回值,如果不写默认返回None. def func1(str1):print(str ...

  3. python基础语法-三大内建数据结构之列表(list)

    定义 列表(list):一组有顺序的数据的集合(用中括号包裹). 元组tuple是一种特殊的列表,不能修改,具有list除了修改的所有操作(用圆括号括着).这里的不可修改是指那一份数据不可修改,两个t ...

  4. python基础语法-三大内建数据结构之字典(dict)

    定义 字典(dict):一组无序的组合数据,以键值对形式出现. 声明 # 1 dict1 = {} # 2 dict1 = {"one": 1, "two": ...

  5. python基础语法-三大内建数据结构之集合(set)

    定义 set(集合):一组无重复无序的数据.就像数学中集合的概念.它没有标准的括号包裹,[]表示list,()表示tuple,{}表示dict. 但是我们可以用带值的大括号来定义. 还有一种集合叫冰冻 ...

  6. Python 基础语法(二)

    2. 元组 tuple和list十分相似,但是tuple是不可变的,即不能修改tuple,元组通过圆括号中用逗号分割的项定义:支持索引和切片操作:可以使用 in 查看一个元素是否在tuple中.空元组 ...

  7. Python基础语法学习笔记

    Python基础语法学习笔记 想淘宝省钱看我简介,博客www.liangxin.name (一) 一.Print()函数 1.数字可以直接输出,无需加引号 只能理解数字,却读不懂文字.因为数字和数学运 ...

  8. python基础语法 第0关print-重庆酉阳高校邦数据科学通识课【Python基础语法】答案...

    重庆酉阳高校邦数据科学通识课[Python基础语法]答案it8p 重庆酉阳高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学 ...

  9. python代码块所属关系的语法-天元高校邦数据科学通识课【Python基础语法】答案...

    天元高校邦数据科学通识课[Python基础语法]答案it8p 天元高校邦数据科学通识课[Python基础语法]答案 关注公众号{帅搜}即可查询答案 支持:大学网课,智慧树,知到,超星,尔雅,学习通,选 ...

最新文章

  1. 袖口里的“超能力”:Facebook腕带式AR传感器,可隔空打字、操控界面,LeCun点赞...
  2. 快速获取OpenCV库(Lib)文件下的所有文件的目录名~
  3. 杂谈:《宫锁心玉》的穿越硬伤
  4. Python学习 第2天 IDE开发工具
  5. javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/
  6. java transient_【转】Java中的关键字 transient
  7. Python处理字符串和列表元组的小技巧
  8. 压缩包安装_SPSS 21 下载(内附压缩包及安装过程)
  9. 4.10 风格代价函数
  10. Postman的新手教学,一学就会!
  11. 自己训练,日文识别效果还可以,有部分常见错字
  12. 【学术相关】明尼苏达大学博导“约法十章”火了:没事不乱开会、合写论文不要催导师,复旦教授直呼值得学习...
  13. 日历教程:如何使Mac和iPhone上的日历显示国家节假日安排?
  14. php截断,php include 路径截断漏洞的利用
  15. 【音视频】浅学ISP数据处理流程
  16. python 倒数两列_相机标定之张正友标定法数学原理详解(含python源码)
  17. 秘密潜入1-普通枪械射速修改-Python源码
  18. 驱动开发(二)——最简单的驱动程序分析
  19. 【机器学习】贝叶斯分类器【下】
  20. SAP的VBAK、VBAP和VBEP表

热门文章

  1. 会计——会计核算前提、内容及方法
  2. Ubuntu编译安装VASP
  3. 高通平台msm8909 LK 实现LCD 兼容
  4. iOS多线程编程:线程同步总结 NSCondtion
  5. BurpSuite插件开发指南之 Java 篇
  6. 分享自制的C#和VB Code互转工具
  7. 驱动硬件Framebuffer驱动程序框架 skeletonfb.c 分析
  8. VM与VPC共存(续)
  9. MySQL中文全文索引
  10. Seam开发环境的搭建