Python, смешивающий PyQt5 и abc.ABCMeta

Я пытаюсь создать AbstractClass, используя оба abc.ABCMeta и QObject в качестве родителей, и не могу заставить его работать.

Вот базовый класс init. У меня есть 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 вместо self

Если я предоставлю 4 аргумента, он запрашивает строку в качестве первого аргумента.

2 ответа

Решение

Я решил это, используя этот подход вместо этого:

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 предполагается использовать в качестве метакласса. Поэтому вместо расширения попробуйте:

class ParamsHandler(pyqtWrapperType):
    __metaclass__ = abc.ABCMeta
Другие вопросы по тегам