3

阅读 CherryPy 教程我遇到了这个

class HelloWorld(object):
    def index(self):
        return "Hello World!"
    index.exposed = True

那是什么意思?在方法索引的局部范围内暴露了一个变量?如果是这样,我可以改变暴露的价值吗?我认为这与 python 的 MetaObject 协议将类定义公开为对象本身有关。

4

2 回答 2

4

函数是 Python 中的一等对象。函数定义创建一个函数对象并将其绑定到函数的名称。函数对象可以具有属性,这就是您在此处看到的。函数属性的生命周期与函数对象的生命周期绑定,而函数内部的局部变量的生命周期与函数的单次执行绑定。它们是完全分开的。

于 2012-11-03T21:37:10.663 回答
2

不,它不是函数索引的局部变量,而是该函数的属性。是的,您也可以在函数之外对其进行修改。

阅读有关函数属性的PEP 232 。

例子:

In [2]: def foo():pass
   ...: 

In [3]: foo.bar="text"

In [4]: foo.bar
Out[4]: 'text'
于 2012-11-03T21:37:38.423 回答