Я читал пример кода для аутентификации с использованием токенов, и есть строка, которую я вообще не понимаю.Вызов класса как функции?
client.set_signature_method(SignatureMethod_RSA_SHA1())
В частности, я не уверен, что "SignatureMethod_RSA_SHA1()" делает. Вот класс SignatureMethod, для справки:
class SignatureMethod_RSA_SHA1(oauth.SignatureMethod):
name = 'RSA-SHA1'
def signing_base(self, request, consumer, token):
if not hasattr(request, 'normalized_url') or request.normalized_url is None:
raise ValueError("Base URL for request is not set.")
sig = (#Creates the request?
oauth.escape(request.method),
oauth.escape(request.normalized_url),
oauth.escape(request.get_normalized_parameters()),
)
key = '%s&' % oauth.escape(consumer.secret)#
if token:
key += oauth.escape(token.secret)
raw = '&'.join(sig)
return key, raw
def sign(self, request, consumer, token):
"""Builds the base signature string."""
key, raw = self.signing_base(request, consumer, token)
with open('../rsa.pem', 'r') as f:
data = f.read()
privateKeyString = data.strip()
privatekey = keyfactory.parsePrivateKey(privateKeyString)
signature = privatekey.hashAndSign(raw)
return base64.b64encode(signature)
Синтаксиса предполагает, что класс вызываются как функция, которую я никогда не видел в свое короткое программировании времени. Кто-нибудь еще, что это значит?
'ИмяКласса()' просто означает * создать новый экземпляр 'ClassName', без аргументов *, что USUA lly означает вызов ClassName .__ init__' (или иногда 'ClassName .__ new__'). Таким образом, это просто передача одного экземпляра 'SignatureMethod_RSA_SHA1' в качестве первого аргумента' client.set_signature_method'. – jonrsharpe
... и методы '__init__' или' __new__' наследуются от родительских классов, в этом случае 'oauth.SignatureMethod'. – mdurant
Возможно, вы захотите прочитать [учебник по классам] (https://docs.python.org/2/tutorial/classes.html#a-first-look-at-classes). – mkrieger1