分享

Python 基础语法(三)

韩克拉玛寒 发表于 2015-3-17 01:03:48 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 4 13857
本帖最后由 韩克拉玛寒 于 2015-3-17 13:42 编辑

问题导读:

1、Python的面向对象是什么?
2、如何理解Python的输入/输出?
3、如何解决Python异常处理?




接上篇 Python 基础语法(一)


七、面向对象编程
  python支持面向对象编程;类和对象是面向对象编程的两个主要方面,类创建一个新的类型,对象是这个类的实例。
  对象可以使用普通的属于对象的变量存储数据,属于对象或类的变量被称为域;对象也可以使用属于类的函数,这样的函数称为类的方法;域和方法可以合称为类的属性。
  域有两种类型--属于实例的或属于类本身;它们分别被称为实例变量和类变量。
  类使用关键字class创建,类的域和方法被列在一个缩进块中。
  类的方法必须有一个额外的第一个参数,但是在调用时不为这个参数赋值,这个特殊变量指对象本身,按照惯例它的名称是self,类似C#中的this。
  1. class Animal:
  2.     pass #empty block
复制代码

  __init__方法  在类的一个对象被创建时调用该方法;相当于c++中的构造函数。
  __del__方法  在类的对象被销毁时调用该方法;相当于c++中的析构函数。在使用del删除一个对象时也就调用__del__方法。
  Python中所有的类成员(包括数据成员)都是public的;只有一个例外,如果使用的数据成员以双下划线为前缀,则为私有变量。
  1. class Person:
  2.     Count = 0
  3.     def __init__(self, name, age):
  4.         Person.Count += 1
  5.         self.name = name
  6.         self.__age = age
  7. p = Person("peter", 25)
  8. p1 = Person("john", 20)
  9. print Person.Count #2
  10. print p.name #peter
  11. 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. class Teacher(SchoolMember):
  12.      '''Represent a teacher.'''
  13.      def __init__(self, name, age, salary):
  14.          SchoolMember.__init__(self, name, age)
  15.          self.salary = salary
  16.          print "Initializing a teacher"
  17.      def tell(self):
  18.          SchoolMember.tell(self)
  19.          print "Salary: %d" % self.salary
  20. class Student(SchoolMember):
  21.      '''Represent a student.'''
  22.      def __init__(self, name, age, marks):
  23.          SchoolMember.__init__(self, name, age)
  24.          self.marks = marks
  25.          print "Initializing a student"
  26.      def tell(self):
  27.          SchoolMember.tell(self)
  28.          print "Marks: %d" % self.marks
  29. print SchoolMember.__doc__
  30. print Teacher.__doc__
  31. print Student.__doc__
  32. t = Teacher("Mr. Li", 30, 9000)
  33. s = Student("Peter", 25, 90)
  34. members = [t, s]
  35. for m in members:
  36.      m.tell()
复制代码

  程序输出如下:
  1. Represent any school member.
  2. Represent a teacher.
  3. Represent a student.
  4. Initializing a school member.
  5. Initializing a teacher
  6. Initializing a school member.
  7. Initializing a student
  8. Name: Mr. Li, Age: 30,  Salary: 9000
  9. 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. f = file("test.txt") # if no mode is specified, the default mode is readonly.
  12. while True:
  13.      line = f.readline()
  14.      if len(line) == 0:  # zero length indicates the EOF of the file
  15.          break
  16.      print line,
  17. f.close()
复制代码

  2. 存储器
    python提供一个标准的模块,成为pickle,使用它可以在一个文件中存储任何python对象,之后可以完整的取出来,这被称为持久地存储对象;还有另外一个模块成为cPickle,它的功能和pickle完全一样,只不过它是用c写的,要比pickle速度快(大约快1000倍)。
  1. import cPickle
  2. datafile = "data.data"
  3. namelist = ["peter", "john", "king"]
  4. f = file(datafile, "w")
  5. cPickle.dump(namelist, f)
  6. f.close()
  7. del namelist
  8. f = file(datafile)
  9. storednamelist = cPickle.load(f)
  10. print storednamelist
  11. #['peter', 'john', 'king']
复制代码

九、异常
  当程序中出现某些异常的状况时,异常就发生了。python中可以使用try ... except 处理。
  1. try:
  2.     print 1/0
  3. except ZeroDivisionError, e:
  4.     print e
  5. except:
  6.     print "error or exception occurred."
  7. #integer division or modulo by zero
复制代码

  可以让try ... except 关联上一个else,当没有异常时则执行else。
  我们可以定义自己的异常类,需要继承Error或Exception。
  1. class ShortInputException(Exception):
  2.     '''A user-defined exception class'''
  3.     def __init__(self, length, atleast):
  4.         Exception.__init__(self)
  5.         self.length = length
  6.         self.atleast = atleast
  7. try:
  8.     s = raw_input("enter someting-->")
  9.     if len(s) < 3:
  10.         raise ShortInputException(len(s), 3)
  11. except EOFError:
  12.     print "why you input an EOF?"
  13. except ShortInputException, ex:
  14.     print "The lenght of input is %d, was expecting at the least %d" % (ex.length, ex.atleast)
  15. else:
  16.     print "no exception"
  17. #The lenght of input is 1, was expecting at the least 3
复制代码

  try...finally
  1. try:
  2.     f = file("test.txt")
  3.     while True:
  4.         line = f.readline()
  5.         if len(line) == 0:
  6.             break
  7.         time.sleep(2)
  8.         print line,
  9. finally:
  10.     f.close()
  11.     print "Cleaning up..."
复制代码


---------------------------------------------- 见续 Python 基础语法(四) ----------------------------------------------



来自群组: about云小组群
欢迎加入about云群425860289432264021 ,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

已有(4)人评论

跳转到指定楼层
lyyitit 发表于 2015-3-17 08:54:53
hahah   谢谢啦
回复

使用道具 举报

271592448 发表于 2015-3-17 14:29:16
回复

使用道具 举报

落魂草 发表于 2015-3-17 19:01:18
回复

使用道具 举报

Libra0507 发表于 2015-4-13 14:00:53
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条