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!’)
- python 面向对象高级编程
- Python面向对象高级编程
- python面向对象高级编程
- python 面向对象高级编程
- python-面向对象高级编程
- python之面向对象高级编程
- Python学习----面向对象高级编程
- python 2.7 : 面向对象高级编程
- Python 之 高级面向对象编程 slots
- python入门6面向对象高级编程
- python面向对象-高级编程 笔记
- 面向对象高级编程
- 面向对象高级编程
- 面向对象高级编程
- python学习笔记(七) - 面向对象高级编程
- Python面向对象高级编程——学习笔记
- Python学习 (六 面向对象高级编程)
- Python基础之六面向对象高级编程
- 抓取数据 格式化
- MVC模式与三层架构的区别
- OPNET 模块计算机类型“X86”与目标计算机类型“X64”冲突 fatal error LNK1112
- 怎么想静态内部类可以有静态成员和方法而成员内部类不行?
- MySQL:控制台远程登录命令
- python面向对象高级编程
- [J
- 缓冲输出流写出数据的缓冲区问题
- 从HDFS上读取带lzo压缩的SequenceFile文件
- 杭电oj1096 加法 注意输出格式
- 1000
- hdu 6050 Funny Function(快速幂)
- 欢迎使用CSDN-个人第一个CSDN博客
- 1091. Acute Stroke (30)三维广搜