首先,创建我自己的类对象继承api
class mainobject1(XAPI):
def __init__(self):
XAPI.__init__(self)
self.count = 0
# built-in to run api
self.run()
# default api method name
def error(self, regId, errorCode, errorString):
print("Error:", errorCode)
self.count += 1
这使我可以使用“错误”方法访问self.count,但是可以将API方法“错误”定向到其他特定名称,例如“ xapi_error”吗?我的程序中几乎没有api,因此我想清楚地声明它们。我只是不想在mainobject类中访问self.error。
因此,请单独创建一个api对象
class myapi(XAPI):
def __init__(self):
XAPI.__init__(self)
# default api method name
def error(self, regId, errorCode, errorString):
print("Error:", errorCode)
# self.count += 1 # not working here
class mainobject2():
def __init__(self):
self.api = myapi()
self.count = 0
# built-in to run api
self.api.run()
此方法不会有命名问题,但不能直接访问我自己的类变量self.count。
然后我尝试了以下操作:
......
class mainobject2():
......
# Failed approach
@self.api.error # <------ ERROR
def xapi_error(self, regId, errorCode, errorString):
......
NameError:未定义名称'self'
我很早以前就通过这种@方法取得了一些成功,但是忘记了它是什么以及如何使用它...
......
import ctypes
class mainobject2():
# Failed approach
def RegCallback(self):
def xapi_error(None, regId, errorCode, errorString):
......
self.xapi_ErrorAddr = PYFUNCTYPE(None, c_char_p)(xapi_error)
self.app.error(self.xapi_ErrorAddr) # <------ ERROR
TypeError:error()缺少2个必需的位置参数:'errorCode'和'errorString']
我能够使用ctypes将dll回调映射到我的类...我想知道python回调是否有类似的东西...
最终,我的结构:
mainobject(self)
├── objectx (self)
│ └── xapi
├── objecty (self)
│ └── yapi
......
self params彼此共享,因此可以在任何地方访问。所以我希望,在线程代码中,它将是:
import XAPI
......
class objectx():
def __init__(self):
self.xapi = myxapi()
self.xcount = 0
# built-in to run api
self.xapi.run()
# answer to this question
......
# then finally
def xapi_error(self, regId, errorCode, errorString):
print("Error:", errorCode)
self.xcount += 1
......
您可以使用输入处理第一个error()调用吗?
然后您可以执行以下操作:
def error(self, regId, errorCode, errorString):
print("Error:", errorCode)
self.count += 1 # you can remove this and put it in another function
if errorCode == 1: # whatever the error codes are
self.xapi_error(.....)
elif errorCode == 2:
self.app_error(....)
else:
super().error(....)
def xapi_error(....):
pass
def app_error(...):
pass
这是您要找的吗?
如果您不拨打电话
super().error(...)
在您的错误函数中,它不会调用重写的方法。