[轉載] python通過反射執行程式碼

ey_snail發表於2020-12-28

參考連結: Python中的反射

場景:python2.7沒有@註解 用於實現介面卡模式,不能再方法執行前後維護一些全域性變數。所以用反射的思路來統一呼叫一個方法來執行其他的函式。 

比如以下例子是為了維護一個長期使用的mysql連線,以此減少mysql的訪問壓力。在每次執行其他方法的時候呼叫 

self.conn = conn_app_db.check_conn(self.conn),以此來維護連線,或者產生新連線(通過conn.ping方法判斷是否連線斷開)。 

class upload_article(object):

 

    def __init__(self):

        self.conn = conn_app_db.check_conn(None)

 

    def query_one_artice(self,a):

        try:

            print self.conn

            sql = "select md5_url,title,author,content from article_url_log limit 1"

            cursor = self.conn.cursor()

            cursor.execute(sql)

            result = cursor.fetchall()

            if result is None:

                return None

            else:

 

                return result

            cursor.close()

        except Exception,e:

            print e

 

 

    def excute_function(self,fn_name,param):

        #這個用於檢查連線是否可用

        self.conn = conn_app_db.check_conn(self.conn)

        print "conn is healthy"

        print "start to excute function "+fn_name

        result = getattr(self, fn_name, None)(param)

        return result 

總結:getattr可以通過名字返回物件的屬性和函式,最後通過代入引數執行函式。

相關文章