面向对象编程有到底有什么好处呢?
1、将数据与操作改数据的功能整合在一起。
A:以前我们操作数据库的方式如下:
1、通过定义数据库操作的函数。
2、每次操作时写传数据库的参数和所要操作的内容。
#通过调用函数的方式操作数据库 def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name) conn=connect(host,port,db,charset) conn.call_proc(sql) return xxx #每次调用都需要重复传入一堆参数 exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;') exc2('127.0.0.1',3306,'db1','utf8','存储过程的名字')
3、上面的操作有个问题,就是每次操作的时候都要传入一堆的参数。
即便是可以简化,也只能是定义全局变量,调用时还要重复传入一堆参数。
HOST=‘127.0.0.1’ PORT=3306 DB=‘db1’ CHARSET=‘utf8’ def exc1(host,port,db,charset): conn=connect(host,port,db,charset) conn.execute(sql) return xxx def exc2(host,port,db,charset,proc_name) conn=connect(host,port,db,charset) conn.call_proc(sql) return xxx exc1(HOST,PORT,DB,CHARSET,'select * from tb1;') exc2(HOST,PORT,DB,CHARSET,'存储过程的名字')
B、当我们学了类之后,就可以这样操作了。
# 3、通过类的操作,这样就可以把数据与操作功能结合到一起了。 # 3.1把共有的属性抽象出来: #host、port、db # 3.2把共有的方法抽象出来: #exc1、exc2 class MySQLHandler: def __init__(self,host,port,db,charset='utf8'): self.host=host self.port=port self.db=db self.charset=charset self.conn=connect(self.host,self.port,self.db,self.charset) def exc1(self,sql): return self.conn.execute(sql) def exc2(self,sql): return self.conn.call_proc(sql) # 4.实例化出一个对象。 obj=MySQLHandler('127.0.0.1',3306,'db1') # 5.通过对这个对象的操作,就可以把数据和相应的操作功能结合 obj.exc1('select * from tb1;') obj.exc2('存储过程的名字')
2、可扩展性高
A、在类中对数据属性的扩展
B、在类中对函数属性的扩展
class Chinese: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex p1=Chinese('egon',18,'male') p2=Chinese('alex',38,'female') p3=Chinese('wpq',48,'female')
class Chinese: country='China' def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def tell_info(self): info=''' 国籍:%s 姓名:%s 年龄:%s 性别:%s ''' %(self.country,self.name,self.age,self.sex) print(info) p1=Chinese('egon',18,'male') p2=Chinese('alex',38,'female') p3=Chinese('wpq',48,'female') print(p1.country) p1.tell_info()
注意:上面的操作我们在类中新增了一个方法,原来的对象不用做任何的改动,我们就可以使用新的类方法。这种方式,正体现了类的可扩展性高。