PyGObject, dbus python и метаклассы - PullRequest
0 голосов
/ 28 января 2019

Я хочу создать подкласс двух классов Python: один из PyGObject и один из python3-dbus:

import gi
from gi.repository import GObject
import dbus.service

class Test(GObject.Object, dbus.service.Object):
    pass

Однако я получаю следующую ошибку:

$ python3 test.py
Traceback (most recent call last):
    File ".../test.py", line 5, in <module>
       class Test(GObject.Object, dbus.service.Object):
TypeError: metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

У меня естьуже выяснили, что это потому, что GObject.Object и dbus.service.Object имеют разные метаклассы, и мне нужно сделать их подклассом тоже:

class M_Test(gi.types.GObjectMeta, dbus.service.InterfaceType):
    pass

class Test(GObject.Object, dbus.service.Object):
    __metaclass__=M_Test
    pass

Однако это не помогает, я продолжаю получать ту же ошибку,Возможно gi.types.GObjectMeta и dbus.service.InterfaceType не являются правильными метаклассами для GObject.Object и dbus.service.Object.Кто-нибудь знает, как сделать слияние метаклассов GObject.Object и dbus.service.Object?

1 Ответ

0 голосов
/ 08 марта 2019

Python3 изменил синтаксис определения метаклассов. PEP-3115

Сейчас class Test(GObject.Object, dbus.service.Object, metaclass=M_Test):.

...