带有函数调用的Python类变量?

时间:2015-09-28 23:07:10

标签: python-2.7

我是python的新手,并通过某人的代码查看以及它是如何工作的。我发现了一些我不太懂的东西。有一个API类,它看起来像类变量(?),如下所示:

class API(object):
    ...
    ping = bind_api(
       path='/user/ping',
       allowed_param=['lat', 'lon'],
       method='POST',
    )
    ...

它看起来像在另一个名为binder的文件中调用一个函数,看起来像这样

def bind_api(**config):

   class APIMethod(object):
      path = config['path']
      allowed_param = config.get('allowed_param', [])
    ......

我真的不知道发生了什么?这是一个类变量吗?什么被分配到' ping'?我该如何访问它?

我正在尝试编写一个使用此库的类,我有类似的东西:

import api

class ApiTest():

   def Test():
        testApi = api.API()                       
        print "Ping ",dir(testApi.ping)
        print testApi.ping

但是这些印刷语句都没有真正让我更深入地了解正在发生的事情,或者说' ping'变量保持,或者我应该对它做什么(或者类中正在做同样事情的其他变量)

1 个答案:

答案 0 :(得分:1)

是的,这看起来像一个类变量。只要类变量没有被实例变量遮蔽,您就可以从任何实例通过名称访问它,或者您可以直接从类类型访问它。例如:

>>> class Foo(object):
...     bar = 1
... 
>>> x = Foo()
>>> y = Foo()
>>> x.bar = 3
>>> Foo.bar
1
>>> y.bar
1
>>> x.bar
3

编译类时,类中的代码 - 例如,在这种情况下,设置ping变量的调用将被执行。这为每个类实例提供了完全相同的ping,如上所示。

有时人们并不打算让类实际被实例化。与模块一样,它们只能是用于保存相关变量的名称空间。因此,可能希望客户端代码始终使用API.ping执行某些操作。

就其内容而言 - 你必须追踪并理解它正在调用的bind_api函数,以便弄明白。