Python中的Monkey修补C扩展

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(

使用中讨论的方法,我无法在psycopg中修补cursor()方法:

尝试用类型修补psycopg2中的方法,但无效:

>>> 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中定义的类型不能添加任意属性