Ich verwende https://pypi.python.org/pypi/twitter als Twitter-API-Bibliothek, beachte jedoch, dass sich der Methodenaufruf geändert hat.
Diese Bibliothek besteht nicht aus der direkten Übergabe der API-URL, sondern aus dem Aufruf der der API entsprechenden Methode. Wenn die API beispielsweise [users / show] lautet (https://dev.twitter.com/rest/reference/get/users/show), verwenden Sie die Methode "twitter.users.show ()". Die URL von users / show lautet übrigens https://api.twitter.com/1.1/users/show.json?screen_name=twitterdev Es sieht so aus.
Diese Methode ist jedoch nicht in der Twitter-Klasse und der TwitterCall-Klasse dieser Bibliothek implementiert, und die URL wird aus dem Methodennamen zusammengestellt, indem __getattr__
zum Aufrufen der API vollständig verwendet wird.
Als Codebeispiel sieht es so aus
class A(object):
def __init__(self, cls, urlparts):
self.callable_cls = cls
self.urlparts = urlparts
def __getattr__(self, k):
print('called {}'.format(k))
try:
return object.__getattr__(self, k)
except AttributeError:
def extend_call(args):
return self.callable_cls(self.callable_cls, self.urlparts + (args,))
return extend_call(k)
def __call__(self, **kwargs):
return self.urlparts
a = A(A, ())
res = a.users.show()
print(res)
Wenn Sie dies tun, wird als Ergebnis ein Tapple "(" Benutzer "," Show ")" zurückgegeben. Von nun an werde ich eine URL https://api.twitter.com/1.1/users/show.json?screen_name=twitterdev erstellen und aufrufen.
Als Erklärung gibt es beim Aufruf von "a.users" kein Feld oder keine Methode mit dem Namen "users", daher wird "getattr" aufgerufen. Darin wird extens_call (users)
aufgerufen und als tapple zu self.urlparts
hinzugefügt. Dann wird a.users.show aufgerufen, da es keine Methode namens "show" gibt. "Getattr" wird aufgerufen. Dies geht auch in "self.urlparts" als Taple. Wenn es schließlich als Methode aufgerufen wird, wird __call__
aufgerufen und gibt den Inhalt von self.urlparts
zurück.
Ich glaube nicht, dass ich diese Art der Implementierung verwenden würde, sondern als Hinweis
Recommended Posts