Python,混合PyQt5和abc.ABCMeta

时间:2018-03-20 12:23:54

标签: python pyqt python-2.x metaclass cls

我正在尝试使用abc.ABCMeta和QObject作为父级创建一个AbstractClass,但似乎无法使其工作。

这是Base类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 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

abc.ABCMeta应该用作元类。因此,请尝试:

,而不是扩展它
class ParamsHandler(pyqtWrapperType):
    __metaclass__ = abc.ABCMeta