我知道如何覆盖类方法(an-introduction-to-classes-and-inheritance-in-python),但有时你得到一个类对象作为从函数调用返回的实例(我说的正确吗?)现在想要改变其中一种方法返回实例(或整个类)。我该怎么做呢?我知道可以覆盖this answer中描述的实例方法,但是它说这不是一种干净的方法。
我的情况:
import pyodbc
import logging
class MyDataBase(object):
def __init__(self):
self.db = pyodbc.connect(cnxn_str)
self.cur = self.db.cursor()
# Now I want to override the cursor method execute
def self.cur.execute(self, sql_str):
logging.debug(sql_str)
super(cursor.execute)
显然这段代码不太对,考虑伪代码。问题实际上是如何增强游标对象的execute方法。 谢谢你的帮助!
答案 0 :(得分:1)
这听起来像是使用装饰器的主要情况,或者您可以在MyDataBase中编写一个方法,将SQL字符串作为参数,记录它,然后调用self.cur.execute
。在我看来,这是扩展/覆盖第三方对象的首选方式。