PYTHON入门(三)

继续跨这个还没跨完的门

在前两篇中主要是针对面向过程的编程,这一篇作为python入门的终结篇,主要讨论一下面向对象的编程以及文件IO和异常处理

一、面向对象编程

  • 1.类和对象
    例如int x : 变量x是int类的一个对象,下面通过例子详细说明
#!/usr/bin/python2
class hello:
  def num(self,a,b):
    print a,b
  i=555

p=hello()
p.num(1,3)
print p.i

定义了一个hello的类,其下有一个num的函数(类的方法)和一个i变量(类的域),p=hello()创建了一个hello类的对象p,然后通过对象p调用类的方法和域,其中p.num(1,3)hello().num(1,3)结果是一样的,域也类似

  • 2.self变量
    从上个代码中,可以看到类的方法和之前的函数定义有一个区别,就是必须有一个额外的变量(建议命名为self),这个变量指向对象本身,self是不需要赋值的
    self变量的工作原理:当调用方法p.num(1,3)的时候,python自动转换为hello.num(p,1,3),这个self变量指向的是对象p

  • 3.__init__方法
    __init__方法是在类的一个对象创立的时候,立即运行,即初始化

#!/usr/bin/python2
class hello:
  def __init__(self,name):
    self.str=name
  def string(self):
    print self.str

p=hello("hlf")
q=hello("flh")
p.string()
q.string()

上面代码,p和q都是hello类的对象,但是初始化的时候,将两个不同的字符串分别存储在p和q的str域中(名称自己定义),再调用string方法,将各自的str域的值打印出来。上面代码并没有调用__init__方法,而初始化的值已经自动传递了

  • 4.类的变量
    类的变量和对象的变量之间的关系,个人理解就像是全局变量和局部变量之间的关系,上个代码中的self.str就是对象的变量(就算这些对象是同一个类,但是他们的self.str也是私有的,不共享),那类的变量(则就是可以在同类的各个对象中,共享数据啦),还是以例子来说
#!/usr/bin/python2
class hello:
  num=222
  def get_num(self,i):
    hello.num=i

p=hello()
q=hello()

print hello.num
q.get_num(111)
print hello.num
p.get_num(333)
print hello.num

创建了hello类的两个对象p和q,hello.num则就是类的变量了,该hello类的每个对象都可以对这个共享的值进行读写,代码的运行结果为:222(初始值)、111(对象q进行一次操作)、333(对象p进行一次操作);相对的self.xxx就是对象的变量了,不共享

  • 5.继承
    依然先来一段代码
#!/usr/bin/python2
class hello:
  i=222
  def hi(self,i):
    print "hello",i

class child(hello):
  def child_num(self,num):
    hello.hi(self,num)
    self.ii=hello.i

p=child()
p.child_num(888)
print p.ii

输出结果为:

hello 888
222

可以看出child类调用(继承)了hello类中的方法和域,p虽是child类的对象,却可以使用hello中的方法和域,假如有一些新的子类child1、child2、child3等都需要父类中的方法和域,这样继承就可以将代码的重用性得到提升

二、文件IO

目前为止,接触到的交互途径就是raw_inputprint,来进行字符串的输入输出,从而和机器交流,还有一种交流方式是通过文件输入输出来进行交互

  • 先以一个简单的例子,迅速初步了解文件的使用
#!/usr/bin/python2
text = '''\
hello
hi
ni hao
'''
f = file('text.txt','w')
f.write(text) 
f.close()

f = file('text.txt','a')
f.write("hhhhh")
f.close()

f = file('text.txt')
while True:
  line = f.readline()
  print line,
  if len(line) == 0:
    break
f.close()

text 中的内容,通过’w’模式,创建并写入在了text.txt文件中,通过close方法告诉python已完成了文件的调用,销毁f
‘a’模式,追加字符串到文件text.txt中
最后读出文件里面的内容,print后面的逗号是为了消除换行(因为readline和默认的print都是带换行的,就不好看了,so去掉一个),输出的结果自己想象
打开文件可以看到和输出的结果是一样的

  • 将任何python对象存储在文件中
    通过pickle模块实现存取,cPickle(c语言写的)功能与前者一样,但是速度比pickle快
#!/usr/bin/python2
import cPickle as p

num1 = [111, 222, [333,444,555]]
f = file("text.txt", 'w')
p.dump(num1,f) 
f.close()

f = file("text.txt")
num2 = p.load(f)
for i in num2:
  print i

结果也是显而易见的,至于文件的更深入就暂时不去了解了

三、异常与处理

  • 异常的发生
#!/usr/bin/python2
s=raw_input("input:")

这样一句代码,是在等待键盘输入,但是如果运行的时候强行Ctr+D终止,看一下输出的结果:

root@hlf-virtual-machine:/home/hlf/mnt# ./main.py
input:Traceback (most recent call last):
File “./main.py”, line 2, in
s=raw_input(“input:”)
EOFError

在没有输入的情况下,强行终止,该代码抛出了一个EOFError异常

  • 异常的处理
    使用try…except语句,处理异常
    将正常代码写入try中,当try中出现异常时,再运行相应的except
#!/usr/bin/python2
try:
  s=raw_input("input:")
except:
  print "\nstop"

现在重复上面的步骤,在没有输入的情况下,强行终止,可以看到输出结果变成了:

root@hlf-virtual-machine:/home/hlf/mnt# ./main.py
input:
stop

如果想精确的处理相应的异常,则可以将程序改为:

#!/usr/bin/python2
try:
  s=raw_input("input:")
except EOFError:
  print "\nstop"
except:
  pass

except:则是处理EOFError异常之外的异常

  • 自己创建异常
    准备自己创建一个empty的异常类,当输入的字符串为空的时候,抛出异常,并将自己输入的“yes”字符串传给异常的类,然后在except中打印
#!/usr/bin/python2
class empty(Exception):
  def __init__(self,string):
    Exception.__init__(self)
    self.i=string

try:
  s=raw_input("input:")
  if s=="":
    raise empty("yes")
except empty,e:
  print "empty:%s"%e.i
except:
  pass

代码创建了一个empty类,该类继承Exception类,并使用其初始化方法,与系统自己抛出的异常不同,我们要通过raise才能将异常抛出去,然后在except中接住这个empty异常

  • try…finally…语句
    当异常发生时,往往需要做一些最终的工作,比如保护数据、关闭文件等操作,那么就需要try...finally了,无论异常是否发生、是否处理,都会执行finally里的程序
#!/usr/bin/python2
try:
  s=raw_input("input:")
except EOFError:
  print "\nEOFError"
except:
  print "\nerror"
finally:
  print "finally"

输出结果:
1>Ctr+D终止程序,发生EOFError异常:

root@hlf-virtual-machine:/home/hlf/mnt# ./main.py
input:
EOFError
finally

2>Ctr+C终止Shell进程,发生异常:

root@hlf-virtual-machine:/home/hlf/mnt# ./main.py
input:^C
error
finally

3>不发生异常,正常运行:

root@hlf-virtual-machine:/home/hlf/mnt# ./main.py
input:hello
finally

python的入门到此也就结束了,到此处的时候,基本上已经可以独立编写一些小程序了,接下来,就是对python标准库模块和一些相关的类及函数、语句进行相应的了解和掌握了,结束就是新的开始

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值