Python,混合PyQt5和abc.ABCM公司

2024-09-27 00:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个使用这两者的抽象类abc.ABCMeta公司而作为父母的QObject似乎无法让它发挥作用。在

这是基类init。我有Pyqt5和python2.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而不是self

如果我提供4个参数,它会要求字符串作为第一个参数。在


Tags: toselfcmd参数modelinitdevicedef
2条回答

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

相关问题 更多 >

    热门问题