gpt4 book ai didi

用于刷新光标实例的 Python 装饰器

转载 作者:行者123 更新时间:2023-11-28 21:30:08 25 4
gpt4 key购买 nike

我有一种在数据库中保存数据的方法,以及一个管理连接的装饰器,但我不知道如何使其工作。

保存方法:

class DA_Row(DABase):

@DABase.connectAndDisconnect
def save(self):
"""
Guarda el spin en la base de datos
"""
self.__cursor.callproc('sp_insert_row', (
"value 1",
"value 2"
)
)

我这里的继承类带有一个不起作用的函数装饰器。

class DABase():

def __init__(self):
self.__cursor = None

@staticmethod
def connectAndDisconnect(func):
def deco(*args):
returnValue = None
self.DBconnect()
try:
self.__cursor = self.db.cursor()
returnValue = func(*args)
finally:
self.desconectarDB()

return returnValue
return deco
....

显示了这个...

如何从装饰器重新定义DABase.__cursor

如果不可能,如何以不同的方式解决这个问题?

感谢您的宝贵时间!

最佳答案

self 只是一个像其他东西一样的名字,它并不像 Java 的 this 那样神奇地出现。您需要将其添加到您的装饰器中。试试这个:

    @staticmethod
def connectAndDisconnect(func):
# deco will be a method, so it needs self (ie a DA_Row instance)
def deco(self, *args):
returnValue = None
self.DBconnect()
try:
self.__cursor = self.db.cursor()
# func was supposed to be a method to, so it needs self
returnValue = func(self, *args)
finally:
self.desconectarDB()

return returnValue
return deco

关于用于刷新光标实例的 Python 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3668254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com