PyGObject,dbus python和元类

问题描述 投票:0回答:1

我想继承两个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.Objectdbus.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.GObjectMetadbus.service.InterfaceType不是GObject.Objectdbus.service.Object的正确元类。有谁知道怎么做GObject.Objectdbus.service.Object的合并元类?

python dbus pygobject dbus-python
1个回答
1
投票

Python3更改了指定元类的语法。 PEP-3115

现在是class Test(GObject.Object, dbus.service.Object, metaclass=M_Test):

© www.soinside.com 2019 - 2024. All rights reserved.