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

    一、没有对象

    • 以未来我们要连接数据库举例,如果没有面向对象的思想,我们只要想要使用一个方法,就必须得这样做
    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')
    
    • 对于上述发生的现象,我们可以总结对象其实就是一个高度整合的产物,整合数据与专门操作该数据的方法(绑定方法)
  • 相关阅读:
    70.BOM
    69.捕获错误try catch
    68.键盘事件
    523. Continuous Subarray Sum
    901. Online Stock Span
    547. Friend Circles
    162. Find Peak Element
    1008. Construct Binary Search Tree from Preorder Traversal
    889. Construct Binary Tree from Preorder and Postorder Traversal
    106. Construct Binary Tree from Inorder and Postorder Traversal
  • 原文地址:https://www.cnblogs.com/nickchen121/p/10987699.html
Copyright © 2011-2022 走看看