类是用来描述具有相同的属性和方法的集合,定义了该集合中每个对象共有的属性和方法,对象是类的实例,可以调用类的方法。
定义类时,如有父类,则写在类名后面的括号里。如果没有继承任何其他父类,默认父类为object。靠继承进行子类化是创建和定制新类类型的一种方式,子类继承基类的属性,如果子类重写基类构造器,基类构造器就不会被调用(否则被调用),基类构造器必须显式写出才会被执行。
类里定义函数,第一个参数必须是self
,代表实例对象本身;__init__
函数,在新对象实例化时会自动运行,用于给新对象赋初值,不应当返回任何对象;类内定义函数时,如调用自身或父类的函数与变量,应使用self.函数名
或self.变量名
。
混合记法(mixedCase) 或 骆驼记法(camelCase) :
Python使用以下编码方式进行访问控制:
_foo
):表示protected变量,只允许其本身与子类访问,不能用于from module import *__foo
):表示private变量,只允许这个类本身访问。__foo__
):定义的是特列方法,类似__init__()
。issubclass()
判断一个类是否另一个类的子类或子孙类
isinstance()
判断一个对象否另一个给定类的实例
特殊类属性:
name 类的名字(字符串)
doc 类的文档字符串
bases 类的所有父类构成的元组
dict 类的属性(返回一个字典,keys是属性名,values是相应属性对象的数据值)
module 类定义所在的模块
class 实例对于的类
e.g.
定义类AddrBookEntry
class AddrBookEntry(object):
def __init__(self,id,nm,ph):
self.empid = id
self.name = nm
self.phone = ph
print('Create instance for:', self.name)
def updatePhone(self,newph):
self.phone = newph
print('Update phone for:',self.name)
john = AddrBookEntry(1,'John Doe','408-555-1212')
print(john.name)
print(john.phone)
输出
Create instance for: John Doe
John Doe
408-555-1212
john.updatePhone('415-555-1212')
print(john.phone)
输出
Update phone for: John Doe
415-555-1212
定义类EmplAddrBookEntry
class EmplAddrBookEntry(AddrBookEntry):
def __init__(self,id,nm,ph,em):
AddrBookEntry.__init__(self,id,nm,ph)
self.email = em
def updateEmail(self,newem):
self.email = newem
print('Update email address for:', self.name)
john = EmplAddrBookEntry(1,'John Doe','408-555-1212','[email protected]')
print(john.email)
输出
Create instance for: John Doe
[email protected]
john.updateEmail('[email protected]')
print(john.email)
输出
Update email address for: John Doe
[email protected]
使用BIF opne()
/file()
,打开文件(默认以读方式,若文件含有汉字可使用encoding=‘utf-8’),返回一个文件对象。文件对象访问模式,默认值为’r’
(1)文件对象的访问模式
文件模式 | 操作 |
---|---|
r | 只读模式 |
w | 只写模式,创建新文件 |
a | 追加模式(若文件不存在,则创建一个) |
r+ | 读写模式 |
w+ | 读写模式 |
a+ | 读写模式 |
rb | 二进制读模式 |
wb | 二进制写模式 |
ab | 二进制追加模式 |
rb+ | 二进制读写模式 |
wb+ | 二进制读写模式 |
ab+ | 二进制读写模式 |
(2) 文件对象的方法
read()
读取文件到字符串,如果未给定size参数(默认-1)或size值为负数,将读取整个文件。
readlines()
读取文件的所有(剩余)行,返回一个字符串列表(行列表)。
readline()
从一个打开的文件每次读取一行数据,将整行(含行结束符)作为字符串返回。如果未给定size参数(默认-1)或size值为负数,读取至行结束符。当没有足够内存可以一次读取整个文件时,使用readline()。
write()
将字符串写入文件
seek()
方法可以将文件"退回"到起始位置
flush()
清除内部I/O缓存,并将数据强行写会磁盘
close()
方法关闭一个之前打开的文件
(1) 常用特殊符号
.
任意单个字符
^
匹配字符串开头
$
匹配字符串结尾
*
前一个字符0次或无限次扩展 abc*
可以是ab/abc/abcc/abccc
+
前一个字符1次或无限次扩展 abc+
可以是abc/abcc/abccc
?
前一个字符0次或1次扩展 abc?
可以是ab/abc
|
左右表达式任意一个 abc|def
表示abc或def
{m}
扩展前一个字符m次 ab{2}c
表示 abbc
{m,n}
扩展前一个字符m至n次(含n)ab{1,2}c
表示 abc/abbc
[ ]
对单个字符给出取值范围
[abc]
表示a,b,c中的一个 [a-z]
表示a到z单个字符
[^]
对单个字符给出排除范围 [^abc ]
非a或b或c的单个字符
()
分组标记,内部只能用|
\d
数字,等价于[0-9]
\w
单词字符,等价于[A-Za-z0-9_]
e.g.
^[A-Za-z]+$
26个字母组成的字符串
[A-Za-z0-9]+$
26个字母和数字组成的字符串
[\u4e00-\u9fa5]
中文字符
^[\u4E00-\u9FA5]{2,4}
2-4个汉字
(2) re模块
match()
:从字符串开始位置对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
search()
:从字符串任意位置的地方,对模式进行匹配。匹配成功,返回一个Match对象;匹配失败,返回None。
findall()
:返回全部匹配对象的列表
split()
:根据正则表达式的分隔符吧字符串分割为一个列表,并返回
匹配对象主要有以下两个方法:
group()
:返回全部匹配对象,或特定subgroup,如group(0)
groups()
:返回一个包含全部匹配的subgroup的元组(如果没有成功匹配,返回一个空元组)函数式用法:一次性操作
import re
rst = re.search(r'[1-9]\d{5}','TEST 1000191')
面向对象用法:编译多次操作
pat = re.compile(r'[1-9]\d{5}')
rst = pat.search('TEST 1000191')