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