码迷,mamicode.com
首页 > 其他好文 > 详细

面向对象的高级编程

时间:2016-03-08 17:55:02      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:

1.给类对象绑定的函数,只对这个对象生效, 而对类绑定的对象, 所有的对象都可以调用. 栗子:

def set_score(self, score):
    self.score = score

s.set_age = MethodType(set_score, s)    #对象绑定

Student.set_score = MethodType(set_score, Student)    #绑定类

动态绑定允许我们在程序运行的过程中动态给class加上功能,这在静态语言中很难实现

 

2.使用__slots__ 限制实例属性. 在定义class的时候,定义一个特殊的__slots__变量, 限制该class实例能添加的属性

class Student(object):
    __slots__ = (name, age) # 用tuple定义允许绑定的属性名称

要注意,__slots__定义的属性仅对当前类实例起作用,对继承的子类是不起作用的

3.使用@property可以将python定义的函数"当做"属性访问, 从而提供更加友好的访问方式, 但有时候setter/getter也是需要的.

内置装饰器负责把一个方法变成属性调用, 它既能检查参数,又可以用类似属性这样简单的方式来访问变量.

4.多重继承

class Animal(object):
    pass

# 大类:
class Mammal(Animal):
    pass

class Bird(Animal):
    pass

# 各种动物:
class Dog(Mammal):
    pass

class Bat(Mammal):
    pass

class Parrot(Bird):
    pass

class Ostrich(Bird):
    pass

 

 

IO编程

 

#!/usr/bin/env python
# encoding: utf-8
f = open(./testdir/test.txt, r)  #‘r‘表示读

f.read()    #一次读取文件的全部内容

f.close()   #关闭文件

#文件读写出错都可能产生IOError,一旦出错,f.close就不能调用
#为保证无论是否出错都能正确关闭文件,我们用try...finally实现

try:
    f = open(./testdir/Forever.mp3, rb)
    print(f.read())
finally:
    if f:
        f.close()

#每次这样写太繁琐,引入with语句自动帮我们调用方法:
with open(./testdir/test.txt, r) as f:
    print(f.read())

# read(size)防止一次性读取文件过多,内存负荷,可以反复调用
# 调用readline()可以每次读取一行内容
# 调用readlines()一次读取所有的内容并按行返回list

#如果文件很小,read()一次性读取最方便;如果不能确定文件大小,
#反复调用read(size)比较保险;
#如果是配置文件,调用readlines()最方便

for line in f.readlines():
    print(line.strip)   #把末尾的‘\n‘删掉

##file-like Object不要求从特定类继承,只要写个read()方法就行
# StringIO就是在内存中创建的file-like Object,常用作临时缓冲

#读取二进制文件,如图片视频音频等,用‘rb‘
#要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数
#       栗子:读取GBK编码的文件
f = open(./testdir/Forever.mp3, rb)
f.read()

f = open(./testdir/test.txt, r, encoding = gbk)
f.read()

#某些不规范文件,会遇到UnicodeDecodeError,因为在文本文件中可能
#夹杂了一些非编码的字符. 这是open()函数还接收一个errors参数,
#表示如果遇到编码错误后如何处理. 最简单处理是直接忽略
f = open(./testdir/Forever.mp3, r, encoding = gbk, errors = ignore)


#写文件 ‘w‘文本文件, ‘wb‘二进制文件
f = open(./testdir/test.txt, w)
f.write(gogleem)
f.close()

#保险的with语句,防止忘记写close
with open(./testdir/test.txt, w) as f:
    f.write(Frente!)

#要写入特定编码的文本文件,请给open()函数传入encoding参数,
#        字符串自动转换成指定编码

#使用with语句操作文件IO是个好习惯
# w是覆盖, a是续写

 

 

 

 

面向对象的高级编程

标签:

原文地址:http://www.cnblogs.com/feixiao5566/p/5253496.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!