6 小结

面向对象学习目录

1 面向对象介绍

2 类、实例、属性、方法详解

3 面向过程与面向对象进一步比较

4 类与对象

5 属性查找与绑定方法

6 小结

7 继承与派生

8 组合

9 抽象类

10 多态

11 封装

12 绑定方法与非绑定方法

13 内置方法(上)

14 内置方法(中)之描述符

15 内置方法(下)

16 元类


从代码级别看面向对象

1、在没有学习类这个概念时,数据与功能是分离的
 1 def exc1(host,port,db,charset,sql):
 2   conn=connect(host,port,db,charset)
 3   conn.execute(sql)
 4   return xxx
 5  
 6  
 7 def exc2(host,port,db,charset,proc_name):
 8   conn=connect(host,port,db,charset)
 9   conn.call_proc(proc_name)
10   return xxx
11  
12 #每次调用都需要重复传入一堆参数
13 exc1('127.0.0.1',3306,'db1','utf8','select * from tb1;')
14 exc2('127.0.0.1',3306,'db1','utf8','存储过程的名字')

 

2、我们能想到的解决方法是,把这些变量都定义成全局变量
 1 HOST=‘127.0.0.1 2 PORT=3306
 3 DB=‘db1’
 4 CHARSET=‘utf8’
 5  
 6 def exc1(host,port,db,charset,sql):
 7   conn=connect(host,port,db,charset)
 8   conn.execute(sql)
 9   return xxx
10  
11  
12 def exc2(host,port,db,charset,proc_name)
13   conn=connect(host,port,db,charset)
14   conn.call_proc(proc_name)
15   return xxx
16  
17 exc1(HOST,PORT,DB,CHARSET,'select * from tb1;')
18 exc2(HOST,PORT,DB,CHARSET,'存储过程的名字')

 

3、但是2的解决方法也是有问题的,按照2的思路,我们将会定义一大堆全局变量,这些全局变量并没有做任何区分,即能够被所有功能使用,然而事实上只有HOST,PORT,DB,CHARSET是给exc1和exc2这两个功能用的。言外之意:我们必须找出一种能够将数据与操作数据的方法组合到一起的解决方法,这就是我们说的类了
 1 class MySQLHandler:
 2   def __init__(self,host,port,db,charset='utf8'):
 3     self.host=host
 4     self.port=port
 5     self.db=db
 6     self.charset=charset
 7     self.conn=connect(self.host,self.port,self.db,self.charset)
 8   
 9   def exc1(self,sql):
10     return self.conn.execute(sql)
11  
12   def exc2(self,sql):
13     return self.conn.call_proc(sql)
14  
15  
16 obj=MySQLHandler('127.0.0.1',3306,'db1')
17 obj.exc1('select * from tb1;')
18 obj.exc2('存储过程的名字')
 
总结使用类可以:
将数据与专门操作该数据的功能整合到一起。

可扩展性高

定义类并产生三个对象
 1 class Chinese:
 2   def __init__(self,name,age,sex):
 3     self.name=name
 4     self.age=age
 5     self.sex=sex
 6  
 7  
 8 p1=Chinese('egon',18,'male')
 9 p2=Chinese('alex',38,'female')
10 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()

 

posted @ 2018-04-15 12:58  海上流星  阅读(226)  评论(0编辑  收藏  举报