我是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'变量保持,或者我应该对它做什么(或者类中正在做同样事情的其他变量)
答案 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
函数,以便弄明白。