Python,混合 PyQt5 和 abc.ABCMeta
Python, mixing PyQt5 and abc.ABCMeta
我正在尝试使用 abc.ABCMeta 和 QObject 作为父对象创建一个 AbstractClass,但似乎无法使其工作。
这里是 Base class 初始化。我有 Pyqt5 和 python 2.7
pyqtWrapperType = type(QObject)
class ParamsHandler(abc.ABCMeta, pyqtWrapperType):
def __init__(self, device_model, read_only=False):
super(ParamsHandler, self).__init__()
self.cmd_to_get_data = None
self.device_model = device_model
class ConfigParamsHandler(ParamsHandler):
def __init__(self, device_model):
super(ConfigParamsHandler, self).__init__(device_model)
self.cmd_to_get_data = Commands.CONFIG_PARAMS
我收到 TypeError('new() 恰好需要 4 个参数(给定 2 个)',) 我也有 Pycharm 建议我使用 cls 而不是自己
如果我提供 4 个参数,它会要求一个字符串作为第一个参数。
abc.ABCMeta
应该用作元类。因此,与其扩展它,不如尝试:
class ParamsHandler(pyqtWrapperType):
__metaclass__ = abc.ABCMeta
我改用这种方法解决了它:
class ParamsHandler_Meta(type(QObject), type(abc.ABCMeta)):
pass
class ParamsHandlerClass(QObject):
pass
class ParamsHandler(ParamsHandlerClass):
__metaclass__ = ParamsHandler_Meta
def __init__(self, device_model, cmd_to_get_data, read_only=False):
super(ParamsHandler, self).__init__()
self.cmd_to_get_data = cmd_to_get_data
我正在尝试使用 abc.ABCMeta 和 QObject 作为父对象创建一个 AbstractClass,但似乎无法使其工作。
这里是 Base class 初始化。我有 Pyqt5 和 python 2.7
pyqtWrapperType = type(QObject)
class ParamsHandler(abc.ABCMeta, pyqtWrapperType):
def __init__(self, device_model, read_only=False):
super(ParamsHandler, self).__init__()
self.cmd_to_get_data = None
self.device_model = device_model
class ConfigParamsHandler(ParamsHandler):
def __init__(self, device_model):
super(ConfigParamsHandler, self).__init__(device_model)
self.cmd_to_get_data = Commands.CONFIG_PARAMS
我收到 TypeError('new() 恰好需要 4 个参数(给定 2 个)',) 我也有 Pycharm 建议我使用 cls 而不是自己
如果我提供 4 个参数,它会要求一个字符串作为第一个参数。
abc.ABCMeta
应该用作元类。因此,与其扩展它,不如尝试:
class ParamsHandler(pyqtWrapperType):
__metaclass__ = abc.ABCMeta
我改用这种方法解决了它:
class ParamsHandler_Meta(type(QObject), type(abc.ABCMeta)):
pass
class ParamsHandlerClass(QObject):
pass
class ParamsHandler(ParamsHandlerClass):
__metaclass__ = ParamsHandler_Meta
def __init__(self, device_model, cmd_to_get_data, read_only=False):
super(ParamsHandler, self).__init__()
self.cmd_to_get_data = cmd_to_get_data