openstack中API调用源码分析

xiaoxiao2021-02-28  65

最近看openstack源码,看到API调用时被搞得有点晕 因此精简了如下两个例子,分享出来。 我们先来看下面这个例子:

#!/usr/bin/env python # coding:utf-8 class Route(object): def __init__(self, res): print 'route __init__' self.resource = res @classmethod def factory(cls): print 'factory' return cls() def __call__(self): print 'route __call__' return self.resource() class Resource(object): def __init__(self): print 'resource __init__' def __call__(self): print 'resource __call__' class API(Route): def __init__(self): print 'api __init__' res = Resource() print 'api __init__' super(API, self).__init__(res) kk = API.factory() print kk kk() 执行结果: factory api __init__ resource __init__ api __init__ route __init__ <__main__.API object at 0x7fee6ffe3850> route __call__ resource __call__ [Finished in 0.049s]

是不是很好理解呢?下面我们将它修改成openstack的API的形式,看下面例子,这是你应该就会很好理解了。

#!/usr/bin/env python # coding:utf-8 class Route(object): def __init__(self, res): print 'route __init__' self.resource = res @classmethod def factory(cls): print 'factory' return cls(Resource()) def __call__(self): print 'route __call__' return self.resource() class Resource(object): def __init__(self): print 'resource __init__' def __call__(self): print 'resource __call__' def connect(self, conn): print 'connect',conn class API(Route): def __init__(self, res): print 'api __init__' res.connect("-------------") print 'api __init__' super(API, self).__init__(res) kk = API.factory() print kk kk() 执行结果: factory resource __init__ api __init__ connect ------------- api __init__ route __init__ <__main__.API object at 0x7f81750be8d0> route __call__ resource __call__ [Finished in 0.049s]

通过这种逐渐代码深入的方式,先写自己熟悉的,然后在将它改成openstack的形式,我们便可以很好的理解openstack的源码了,算是一个小技巧吧。

转载请注明原文地址: https://www.6miu.com/read-58708.html

最新回复(0)