Python中的Monkey修补C扩展
使用中讨论的方法,我无法在psycopg中修补cursor()方法: 尝试用类型修补psycopg2中的方法,但无效:Python中的Monkey修补C扩展,python,psycopg2,monkeypatching,python-c-extension,python-extensions,Python,Psycopg2,Monkeypatching,Python C Extension,Python Extensions,使用中讨论的方法,我无法在psycopg中修补cursor()方法: 尝试用类型修补psycopg2中的方法,但无效: >>> import psycopg2, types import psycopg2, types >>> db = psycopg2.connect('dbname=foo') db = psycopg2.connect('dbname=foo') >>> def mycursor(self): def mycursor(
>>> import psycopg2, types
import psycopg2, types
>>> db = psycopg2.connect('dbname=foo')
db = psycopg2.connect('dbname=foo')
>>> def mycursor(self):
def mycursor(self):
... db.rollback()
db.rollback()
... return self.cursor()
return self.cursor()
...
>>> db.mycursor = types.MethodType(mycursor, db)
db.mycursor = types.MethodType(mycursor, db)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'psycopg2._psycopg.connection' object has no attribute 'mycursor'
>>>
导入psycopg2,类型
导入psycopg2,类型
>>>db=psycopg2.connect('dbname=foo')
db=psycopg2.connect('dbname=foo')
>>>def mycursor(自我):
def mycursor(自我):
... db.rollback()
db.rollback()
... 返回self.cursor()
返回self.cursor()
...
>>>db.mycursor=types.MethodType(mycursor,db)
db.mycursor=types.MethodType(mycursor,db)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:'psycopg2.\u psycopg.connection'对象没有属性'mycursor'
>>>
是因为它是C扩展吗?正确。在C中定义的类型不能添加任意属性