python面向对象高级编程

来源:互联网 发布:北京超图软件 编辑:程序博客网 时间:2024/05/16 04:35

1.给对象动态绑定属性和方法
class Student(object):
pass
然后,尝试给实例绑定一个属性:

s = Student()
s.name = ‘Michael’ # 动态给实例绑定一个属性
print(s.name)
Michael
还可以尝试给实例绑定一个方法:

def set_age(self, age): # 定义一个函数作为实例方法
… self.age = age

from types import MethodType
s.set_age = MethodType(set_age, s) # 给实例绑定一个方法
s.set_age(25) # 调用实例方法
s.age # 测试结果
25
但是,给一个实例绑定的方法,对另一个实例是不起作用的:

s2 = Student() # 创建新的实例
s2.set_age(25) # 尝试调用方法
Traceback (most recent call last):
File “”, line 1, in
AttributeError: ‘Student’ object has no attribute ‘set_age’
为了给所有实例都绑定方法,可以给class绑定方法:

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

Student.set_score = set_score

2.使用slots

为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的slots变量,来限制该class实例能添加的属性:

class Student(object):
slots = (‘name’, ‘age’) # 用tuple定义允许绑定的属性名称
注意:使用_slots_要注意,_slots_定义的属性仅对当前类实例起作用,对继承的子类是不起作用的。

3.@property

把一个getter方法变成属性,只需要加上@property就可以了,此时,@property本身又创建了另一个装饰器@score.setter,负责把一个setter方法变成属性赋值.
还可以定义只读属性,只定义getter方法,不定义setter方法就是一个只读属性.

4.多重继承

 由于Python允许使用多重继承,因此,MixIn就是一种常见的设计。只允许单一继承的语言(如Java)不能使用MixIn的设计。

5.异常处理

try-except-finally //python内置
raise //自己抛出

6.IO编程

Input Stream就是数据从外面(磁盘、网络)流进内存,Output Stream就是数据从内存流到外面去。同步和异步的区别就在于是否等待IO执行的结果。很明显,使用异步IO来编写程序性能会远远高于同步IO,总之,异步IO的复杂度远远高于同步IO。
读文件:
————
1.要以读文件的模式打开一个文件对象,使用Python内置的open()函数,传入文件名和标示符:
f = open(‘/Users/michael/test.txt’, ‘r’)
标示符’r’表示读,这样,我们就成功地打开了一个文件。
2.调用read()方法可以一次读取文件的全部内容,Python把内容读到内存,用一个str对象表示.
f.read()
3.最后一步是调用close()方法关闭文件
f.close()
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try … finally来实现:
try:
f = open(‘/path/to/file’, ‘r’)
print(f.read())
finally:
if f:
f.close()
但是每次都这么写实在太繁琐,所以,Python引入了with语句来自动帮我们调用close()方法:

with open(‘/path/to/file’, ‘r’) as f:
print(f.read())
read() //一次读取所有内容
read(size)//一次读取size字节的内容
readline()//可以每次读取一行内容
readlines()//一次读取所有内容并按行返回list
如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便:
for line in f.readlines():
print(line.strip()) # 把末尾的’\n’删掉
要读取二进制文件,比如图片、视频等等,用’rb’模式打开文件

f = open(‘/Users/michael/test.jpg’, ‘rb’)
写文件和读文件是一样的,唯一区别是调用open()函数时,传入标识符’w’或者’wb’表示写文本文件或写二进制文件:
with open(‘/Users/michael/test.txt’, ‘w’) as f:
f.write(‘Hello, world!’)

原创粉丝点击