Python 将类作为函数调用?

Python 将类作为函数调用?,python,class,Python,Class,我已经阅读了一些使用令牌进行身份验证的示例代码,有一行我根本不理解 client.set_signature_method(SignatureMethod_RSA_SHA1()) 具体来说,我不确定“SignatureMethod_RSA_SHA1()”的作用。以下是SignatureMethod类,供参考: class SignatureMethod_RSA_SHA1(oauth.SignatureMethod): name = 'RSA-SHA1' def signing_base(se

我已经阅读了一些使用令牌进行身份验证的示例代码,有一行我根本不理解

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)

语法表明该类是作为函数调用的,这在我的短时编程中从未见过。其他人知道这意味着什么吗?

SignatureMethod\u RSA\u SHA1()
只是类构造函数。它的
\uuuu init\uuuu
函数被调用


换句话说-
set\u signature\u方法
通过
SignatureMethod\u RSA\u SHA1
实例调用。

这就是实例化类的方式,它没有被用作函数(尽管从技术上讲它调用类
\u init\u()
方法)

client.set\u signature\u method()
显然采用了某种签名方法类的实例(不确定
SignatureMethod\u RSA\u SHA1()
是否是唯一可能的类型),并且很可能将其挂在
client
对象上,以便通过
client.signature\u method
或某些其他属性访问

这与执行以下操作相同:

sig_method = SignatureMethod_RSA_SHA1()
client.set_signature_method(sig_method)
如果您不需要在
客户端
实例之外再次访问
sig_方法
,那么这只是一种较短的方法

更熟悉的例子是:

a_list = list()
a_dict = dict()
这样,
SignatureMethod\u RSA\u SHA1()
及其属性和方法现在可用于
客户机
实例。例如,我们可以:

>>> class MyClass:
    def __init__(self, my_list):
        self.my_list = my_list
    def add_to_list(self, a_value):
        self.my_list.append(a_value)

>>> foo = MyClass(list())
>>> foo.my_list
[]
现在,该类可以使用该列表,其方法也可以使用:

>>> foo.my_list.extend([2,4,1,4,8,0,3,])
>>> foo.my_list
[2, 4, 1, 4, 8, 0, 3]
更重要的是,该类可以在内部使用列表对象方法,如我们的
add\u to\u list()
方法(这可能就是
SignatureMethod\u RSA\u SHA1()
的使用方式):


ClassName()
只意味着创建
ClassName
的新实例,不带任何参数,这通常意味着调用
ClassName.\uuuuu init\uuuuuuu
(或者有时是
ClassName.\uuuuu new\uuuuuuuuuuu
)。因此,这只是将一个
SignatureMethod\u RSA\u SHA1
实例作为第一个参数传递给
client.set\u signature\u method
。。。。而
\uuuu init\uuuuu
\uuuu new\uuuuuu
方法是从父类继承的,在本例中是
oauth.SignatureMethod
。您可能需要阅读。
>>> foo.add_to_list('a')
>>> foo.my_list
[2, 4, 1, 4, 8, 0, 3, 'a']