我有一个顶级类和扩展顶级类的类,但是子类的几乎所有方法都来自顶级类(使用继承,没有重新实现),所以我没有子类中的方法,我怎么能为每个子类使用 dbus 导出它们(每个子类的名称作为 dbus 路径的一部分)?
我将显示一个示例代码以进行澄清,我的类结构是:
Window (main class)
|--WindowOne (child class)
|--WindowTwo
|--WindowThree
我的 dbus 接口是com.example.MyInterface
,我想使用 : 访问每个子类com.example.MyInterface.WindowOne
,并且对于每个子类,我想访问方法,包括从主类继承的方法,例如com.example.MyInterface.WindowOne.show
和com.example.MyInterface.WindowOne.destroy
。
在这段代码中,我用'Window'类扩展了子类'WindowOne','Window'中的方法show()
和destroy()
'WindowOne'没有重新实现,但是在这段代码中我把方法放在了show()
解释问题的地方,我让代码工作的方式是这样的,我在子类中重新声明了该方法show()
,但这似乎很糟糕。
最大的问题可能是:有一些方法可以使用装饰器:@dbus.service.method('com.example.MyInterface.WindowOne')
对于类(在这种情况下是子类)?
测试源代码:
# interface imports
from gi.repository import Gtk
# dbus imports
import dbus
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
# Main window class
class Window(dbus.service.Object):
def __init__(self, gladeFilePath, name):
# ... inicialization
self.name = name
self.busName = dbus.service.BusName('com.example.MyInterface.', bus=dbus.SessionBus())
dbus.service.Object.__init__(self, self.busName, '/com/example/MyInterface/' + self.name)
def show(self):
self.window.show_all()
def destroy(self):
Gtk.main_quit()
# Child window class
class WindowOne(Window):
def __init__(self, gladeFilePath):
Window.__init__(self, gladeFilePath, "WindowOne")
@dbus.service.method('com.example.MyInterface.WindowOne')
def show(self):
self.window.show_all()
if __name__ == "__main__":
DBusGMainLoop(set_as_default=True)
gladeFilePath = "/etc/interface.glade"
windowOne = WindowOne(gladeFilePath)
Gtk.main()