zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    C语言作业(心理魔术)
    心理魔术
    作业
    作业
    自定义打包小游戏的build template,接入SDK,
    JavaScript_call,bind,apply的区别
    JavaScript原型链的理解
    学习笔记—前端基础之ES6的数组
    学习笔记 — 前端基础之ES6(2)
    学习笔记 — 前端基础之ES6(1)
  • 原文地址:https://www.cnblogs.com/oceanicstar/p/8847048.html
Copyright © 2011-2022 走看看