ich eine Remote-api haben zu akzeptieren XMLs nur das kann wieAufruf beliebige Methoden auf Klasse wie xmlrpclib.ServerProxy
api = xmlrpclib.ServerProxy(IP)
result = api.Execute({"Method": 'Method_name', "Params": [P1, P2],
... # technical values - authentication, etc
})
Die technischen Werte unterliegen nicht aufgerufen werden häufig ändern - ganze Skript in der Regel dieselben Werte verwenden würde für sie, so habe ich eine Klasse, die eine Methode hat
def call(self, method_name, params):
self.api.Execute(<constructed dictionary>)
ich mich gefragt, ob es möglich wäre, diese Methoden direkt als Methoden der self.api
wie zu nennen:
self.api.method_name(params)
was wiederum würde für mich in den .Execute
und den Rest füllen, mit dem allgemeinen Gedanken wie:
def __getattr__(self, item):
if item in self.__dict__:
return self.item
else:
return functools.partial(self.call, method_name=item)
Also, wenn ich eine Methode in der Klasse definiert (self.foo
, self.bar
und dergleichen) - Aufruf es würde echte Ergebnisse von self.foo
und self.bar
ergeben.
aufrufen es wie self.api.METHOD(params)
wo METHOD
ist ein Brauch man arbeitet, aber dieser Ansatz „verpestet“ andere Methoden, die ich nicht definieren, wie self.api.__repr__
und dergleichen
Stimmt es, dass nach this question mein Ansatz von überschreiben __getitem__
ist völlig falsch? Wenn ja - wie soll ich das umsetzen?
Nimmt 'Execute' ein einzelnes Wörterbuch oder eine Reihe von Schlüsselwörtern? Der Code im ersten Block scheint den ersten anzuzeigen, aber die Art, wie Sie "partially" aufrufen, zeigt Letzteres an. Gibt es auch eine umfassende Liste verfügbarer 'Execute'-Methoden, die dem Skript ausgesetzt sind? – Will
@wilusdaman, es dauert effektiv ein einzelnes Wörterbuch. Die Art "partiell" wird verwendet, weil intermittierende interne und externe Methoden dieses Wörterbuch konstruieren und mit seinen Werten arbeiten. Die umfassende Liste ist leider nicht verfügbar. – RebelWithoutAPulse