2
讓我們以這個類爲例,它擴展了MySQLDB的連接對象。成員函數中的Python調用構造函數
class DBHandler(mysql.connections.Connection):
def __init__(self,cursor=None):
if cursor == None:
cursor = 'DictCursor'
super(DBHandler,self).__init__(host = db_host,
user = db_user,
passwd = db_pass,
db = db,
cursorclass=getattr(mysql.cursors, cursor))
def getall(self,q,params=None):
try:
cur = self.cursor()
cur.execute(q,params)
res = cur.fetchall()
return res
except mysql.OperationalError:
#this is the line in question
pass
def execute(self,q,params):
cur = self.cursor()
cur.execute(q,params)
self.commit()
return cur.lastrowid
這件事在很大程度上是一個方便,以獲得更簡單的訪問常見的所需查詢。
在標註有註釋的行上,是否有可能在Python中調用對象構造函數,即使這是一個成員函數?我使用這個例子來說明,因爲它將有效地重新建立連接,當它在運行查詢之前被超時放下時。
我知道MySQLdb的ping()
方法,這實際上只是一個能力問題。 在python中,是否可以從實例上調用的成員函數內調用構造函數來重新初始化該實例?謝謝!