在python
中函数也是对象, 除了 __doc__
,函数对象
还有很多
属性。使用 dir
函数可以探知 factorial
具有下述属性:
其中大多数属性是 Python
对象共有的
。本节讨论与把函数视作对象相关的几个属性,先从__dict__
开始
与用户定义的常规类
一样,函数使用 __dict__
属性存储
赋予它的用户属性
。这相当于一种基本形式的注解。一般来说,为函数随意赋予属性不是很常见
的做法,但是 Django
框架这么做了。参见“The Django admin site”文档(https://docs.djangoproject.com/en/1.10/ref/contrib/admin/
)中对 short_description
、boolean
和 allow_tags
属性的说明。这篇 Django
文档中举了下述示例,把 short_description
属性赋予一个方法,Django
管理后台使用这个方法时,在记录列表中会出现指定的描述文本:
下面重点说明函数专有而用户定义的一般对象没有的属性。计算两个属性集合的差
集便能得到函数专有属性列表
用户定义的函数的属性
名称 | 类型 | 说明 |
---|---|---|
__annotations__ |
dict |
参数和返回值的注解 |
__call__ |
method-wrapper |
实现 () 运算符;即可调用对象协议 |
__closure__ |
tuple |
函数闭包 ,即自由变量 的绑定(通常是 None ) |
__code__ |
code |
编译成字节码 的函数元数据和函数定义体 |
__defaults__ |
tuple |
形式参数 的默认值 |
__get__ |
method-wrapper |
实现只读 描述符协议 |
__globals__ |
dict |
函数所在模块 中的全局变量 |
__kwdefaults__ |
dict |
仅限关键字 形式参数的默认值 |
__name__ |
str |
函数名称 |
__qualname__ |
str |
函 数 的 限 定 名 称, 如 Random.choice 参阅 PEP 3155 ,https://www.python.org/dev/peps/pep-3155/ |