- OOP :世界、类、接近人类思维
- 类:
python面向对象编程
概述
面向对象编程即OOP编程,区别于面向过程编程,面向对象编程比较适合开发大项目,会以更接近人类的思维角度去写程序。
类和对象
类:具有某种特征的事物的集合(群体)
对象:群体(类)里面的个体
类是抽象的,对象是具体的---类的实例化
创造一个类:
class 类名:
类里面的内容
...
class cl1:
pass
...
实例化一个类
a=cl1()
...
a即类(cl1)内对象
两种调用方法:
构造函数
类在实例化时自动首先触发的函数:init(self,参数)--双下划綫,在类中的方法中必须加上self参数。
class cl2
def__init__(self):
print("hellow,welcome")
构造函数作用是初始化
给类加上参数---给构造方法加上参数
class cl3
def __init__(self,name,job):
print("my name is "+name+"my job is"+job)
输入c=cl3("ag","aqw")--输出my name is ag my job is aqw
属性与方法
属性: 静态的特征。如头发、手臂等
方法: 动态的特征。如唱歌、写字等
类中属性的定义和调用:self.属性名
class cl4:
def __init__(self,name,job):
self.myname=name
self.myjob=job----定义类的属性
输入c=cl4("ag","aqw")--输入myname--输出ag--输入myjob--输出aqw--直接调用类的属性
方法:类里面的函数def 方法名(self,参数)
class cl5:
def myfound(self):
print("aga")
实例化时不需要添加参数,调用的时候需要添加
class cl6:
def myfound1(self,name):
print("hellow"+" "+name)
调用类里面的方法:
c=cl6()------实例化
c.myfound("liuyong")---调用函数myfound()并加参数
输出hellow liuyong
class cl7:
def __init__(self,name):
self.myname=name
def myfound1(self):
print("hellow"+" "+myname)
调用类里面的方法:
c=cl7("liuyong")------实例化即添加参数
c.myfound()---调用函数myfound()并加参数
继承与重载
继承: 把某一个或多个类(基类)的特征拿过来(单继承、多继承)
重载: 把子类(派生类)里面对继承过来的特征重新定义
父类: 基类
子类: 派生类
案例讲解
某一个家庭有父亲、母亲、儿子、女儿,父亲可以说话,母亲可以写字,大儿子继承了父亲写字的能力,女儿同时继承了父母亲、并且有能力听东西,小儿子继承了父亲,但是优化(减弱)了父亲说话的能力。
父亲类(基类):
class father():
def speak(self):
print("I can speak")
单继承类:class 子类(父类)
class son1(father):
pass
执行
s=son1()
s.speak()
---I can speak
母亲类:
class mother()
def write(self):
print("I can write")
多继承:
class daughter(father,mother):
def listen(self):
print("I can listen")
执行
d=daughter()
d.speak()
---I can speak
d.write()
---I can write
d.listen()
---I can listen----多继承不影响新功能
重写(重载):
class son2(father):
def speak(self):
print("I can speak 2")
执行
s=son2()
s.speak()
---I can speak2---重名覆盖
作业:
将多个Excel表格里面的内容合并到一个文件中。
要点:
将多个Excel表格里面的内容合并到一个文件中。
要点:使用第三方模块操作,比如xlrd、xlwt,还需要注意一个Excel中有多个sheet,也需要合并。
例如:
#将多个Excel文件合并成一个
import xlrd
import xlsxwriter
#打开一个excel文件
def open_xls(file):
fh=xlrd.open_workbook(file)
return fh
#获取excel中所有的sheet表
def getsheet(fh):
return fh.sheets()
#获取sheet表的行数
def getnrows(fh,sheet):
table=fh.sheets()[sheet]
return table.nrows
#读取文件内容并返回行内容
def getFilect(file,shnum):
fh=open_xls(file)
table=fh.sheets()[shnum]
num=table.nrows
for row in range(num):
rdata=table.row_values(row)
datavalue.append(rdata)
return datavalue
#获取sheet表的个数
def getshnum(fh):
x=0
sh=getsheet(fh)
for sheet in sh:
x+=1
return x
if __name__=='__main__':
#定义要合并的excel文件列表
allxls=['E:/python/python工具/excel1.xlsx','E:/python/python工具/excel2.xlsx']
#存储所有读取的结果
datavalue=[]
for fl in allxls:
fh=open_xls(fl)
x=getshnum(fh)
for shnum in range(x):
print("正在读取文件:"+str(fl)+"的第"+str(shnum)+"个sheet表的内容...")
rvalue=getFilect(fl,shnum)
#定义最终合并后生成的新文件
endfile='E:/python/python工具/excel3.xlsx'
wb1=xlsxwriter.Workbook(endfile)
#创建一个sheet工作对象
ws=wb1.add_worksheet()
for a in range(len(rvalue)):
for b in range(len(rvalue[a])):
c=rvalue[a][b]
ws.write(a,b,c)
wb1.close()
print("文件合并完成")