TL定製d總線方法名;博士的Python d總線:帶有裝飾
是否有具有用於導出d總線的方法的自定義名稱是從該方法的名稱被裝飾不同的任何方式?
所以這裏的交易:我想有一個註冊上的單個對象d總線具有多個接口,所有的接口有相同的方法(不同的實現):
/com/quaintous
|- com.quaintous.iface1
| |- GET
|- com.quaintous.iface2
| |- GET
如果我是使用表示該單個對象的類並使用method decorator將該類的方法導出到d-bus,但我不能使用兩個名稱相同的方法(第二個方法會覆蓋第一個方法)。
實施例的代碼(期望的)
class Quaintous_DBus(dbus.service.Object):
def __init__(self):
bus_name = dbus.service.BusName('com.quaintous', bus=dbus.SessionBus())
dbus.service.Object.__init__(self, bus_name, '/com/quaintous')
@dbus.service.method('com.quaintous.iface1', name="GET")
def get_iface1(self, args):
# Impl
@dbus.service.method('com.quaintous.iface2', name="GET")
def get_iface1(self, args):
# Impl
類似name="GET"
。
更新
python-debus
實際上並類方法名d-Bus的方法名稱,並且因爲一個一對一的映射不能包含兩個方法具有相同名稱的類,它似乎是不可能的要做到這一點。我正考慮覆蓋_method_lookup
作爲最後的手段,但我希望有一個更好的解決方案呢。
這與我正在使用的解決方法類似,唯一的區別是我沒有類似'Implementation'的內容。我只是(和你的情況一樣)將這些類鏈接在一起,以便python的MRO爲我找到合適的類。我想出的另一個解決方案是覆蓋'_method_lookup'並將我自己的屬性添加到每個處理程序。 –
好的,很酷。我想,如果你想出了同樣的解決方案,我的「答案」對人們來說可能是可以接受和有用的。如果您認爲合適,請接受它。乾杯! – JoGr
它肯定會幫助其他人。但我可能想等待其他答案。這個解決方案相當有用: -/ –