zoukankan      html  css  js  c++  java
  • 120 对象的高度整合

    一、没有对象

    • 以未来我们要连接数据库举例,如果没有面向对象的思想,我们只要想要使用一个方法,就必须得这样做
    import pymysql  # 连接mysql的三方库,可以pip3 install pymysql安装
    
    
    def exc1(host, port, db, charset, sql):
        conn = pymysql.connect(host, port, db, charset)
        conn.execute(sql)
        return xxx
    
    
    def exc2(proc_name):
        conn = pymysql.connect(host, port, db, charsett)
        conn.call_proc(sql)
        return xxx
    
    
    exc1('1.1.1.1', 3306, 'db1', 'utf-8', 'select * from t1')
    exc1('1.1.1.1', 3306, 'db1', 'utf-8', 'select * from t2')
    exc1('1.1.1.1', 3306, 'db1', 'utf-8', 'select * from t3')
    exc1('1.1.1.1', 3306, 'db1', 'utf-8', 'select * from t4')
    
    • 由于host、port、db、charset可能是固定不变的,sql一直在变化,因此我们通过上述的方法实现不同的sql语句,非常麻烦,因此我们可以改用默认形参
    def exc1(sql, host='1.1.1.1', port=3306, db='db1', charset='utf-8'):
        conn = pymysql.connect(host, port, db, charset)
        conn.execute(sql)
        return xxx
    
    exc1('select * from t1')
    exc1('select * from t2')
    exc1('select * from t3')
    exc1('select * from t4')
    
    • 虽然是用默认参数简化了操作,但是对于不同引用的对象,参数并不是一成不变的,或者我们需要对exc2方法进行修改,这是非常麻烦的,因此可以考虑使用面向对象

    二、有对象

    • 有了面向对象之后,对于上述的例子,我们可以这样做
    import pymysql
    
    
    class Foo:
        def __init__(self, host, port, db, chartset):
            self.host = host
            self.port = port
            self.db = db
            self.charset = chartset
    
        def exc1(self, sql):
            conn = pymysql.connect(self.host, self.port, self.db, self.charset)
            conn.execute(sql)
            return xxx
    
        def exc2(self, proc_name):
            conn = pymysql.connect(self.host, self.port, self.db, self.charsett)
            conn.call_proc(sql)
            return xxx
    
    
    obj1 = Foo('1.1.1.1', 3306, 'db1', 'utf-8')
    obj1.exc1('select * from t1')
    obj1.exc1('select * from t2')
    obj1.exc1('select * from t3')
    obj1.exc1('select * from t4')
    
    obj2 = Foo('1.1.1.2', 3306, 'db1', 'utf-8')
    obj2.exc1('select * from t4')
    
    • 对于上述发生的现象,我们可以总结对象其实就是一个高度整合的产物,整合数据与专门操作该数据的方法(绑定方法)
  • 相关阅读:
    SharePoint 2013 图文开发系列之自定义字段
    SharePoint 2013 图文开发系列之Visual Studio 创建母版页
    SharePoint 2013 图文开发系列之代码定义列表
    SharePoint 2013 图文开发系列之计时器任务
    SharePoint 2013 图文开发系列之应用程序页
    SharePoint 2013 图文开发系列之事件接收器
    SharePoint 2013 图文开发系列之可视化WebPart
    SharePoint 2013 图文开发系列之WebPart
    SharePoint 2013 对二进制大型对象(BLOB)进行爬网
    SharePoint 2013 状态机工作流之日常报销示例
  • 原文地址:https://www.cnblogs.com/abdm-989/p/11884937.html
Copyright © 2011-2022 走看看