本帖最后由 韩克拉玛寒 于 2015-3-17 13:42 编辑
1、Python的面向对象是什么?
2、如何理解Python的输入/输出?
3、如何解决Python异常处理?
接上篇 Python 基础语法(一)
七、面向对象编程 python支持面向对象编程;类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例。 对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。 域有两种类型--属于实例的或属于类本身;它们分别被称为实例变量和类变量。 类使用关键字class创建,类的域和方法被列在一个缩进块中。 类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似C#中的this。
- class Animal:
- pass #empty block
复制代码
__init__方法 在类的一个对象被创建时调用该方法;相当于c++中的构造函数。 __del__方法 在类的对象被销毁时调用该方法;相当于c++中的析构函数。在使用del删除一个对象时也就调用__del__方法。 Python中所有的类成员(包括数据成员)都是public的;只有一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。 - class Person:
- Count = 0
- def __init__(self, name, age):
- Person.Count += 1
- self.name = name
- self.__age = age
-
- p = 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支持多重继承。下面是一个关于继承的例子: - class SchoolMember:
- '''Represent any school member.'''
- def __init__(self, name, age):
- self.name = name
- self.age = age
- print "Initializing a school member."
-
- def tell(self):
- '''Tell my details'''
- print "Name: %s, Age: %s, " % (self.name, self.age),
-
- class Teacher(SchoolMember):
- '''Represent a teacher.'''
- def __init__(self, name, age, salary):
- SchoolMember.__init__(self, name, age)
- self.salary = salary
- print "Initializing a teacher"
-
- def tell(self):
- SchoolMember.tell(self)
- print "Salary: %d" % self.salary
-
- class Student(SchoolMember):
- '''Represent a student.'''
- def __init__(self, name, age, marks):
- SchoolMember.__init__(self, name, age)
- self.marks = marks
- print "Initializing a student"
-
- def tell(self):
- SchoolMember.tell(self)
- print "Marks: %d" % self.marks
-
- print SchoolMember.__doc__
- print Teacher.__doc__
- print Student.__doc__
-
- t = Teacher("Mr. Li", 30, 9000)
- s = Student("Peter", 25, 90)
-
- members = [t, s]
-
- for m in members:
- 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方法来关闭文件。 - test = '''\
- This is a program about file I/O.
-
- Author: Peter Zhange
- Date: 2011/12/25
- '''
-
- f = file("test.txt", "w") # open for writing, the file will be created if the file doesn't exist
- f.write(test) # write text to file
- f.close() # close the file
-
- f = file("test.txt") # if no mode is specified, the default mode is readonly.
-
- while True:
- line = f.readline()
- if len(line) == 0: # zero length indicates the EOF of the file
- break
- print line,
-
- f.close()
复制代码
2. 存储器 python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。 - import cPickle
-
- datafile = "data.data"
-
- namelist = ["peter", "john", "king"]
-
- f = file(datafile, "w")
- cPickle.dump(namelist, f)
- f.close()
-
- del namelist
-
- f = 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 = length
- self.atleast = atleast
-
- try:
- 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:
- break
- time.sleep(2)
- print line,
- finally:
- f.close()
- print "Cleaning up..."
复制代码
---------------------------------------------- 见续 Python 基础语法(四) ----------------------------------------------
来自群组: about云小组群 |