码迷,mamicode.com
首页 > 其他好文 > 详细

14ch

时间:2015-06-14 00:17:26      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:

14.1可调用对象

Python有四种可调用对象(可以通过函数操作符‘()’来调用的对象):函数、方法、类、类的实例

14.1.1函数

1.内建函数(BIF)

内建函数是用C/C++写的,编译过后放入Python解释器,然后把它们作为第一名称空间的一部分加载进系统。如之前章节所述,这些函数在_bulitin_模块里,并作为__builtins__模块导入到解释器中

属性 描述
bif.__doc__ 文档字符串(或None)
bif.__name__ 字符串类型的文档名字
bif.__self__ 设置为None(保留给内建方法)
bif.__module__ 存放bif定义的模块名字(或None)

可以用dir()列出函数的所有属性

>>> dir(type)
[‘__abstractmethods__‘, ‘__base__‘, ‘__bases__‘, ‘__basicsize__‘, ‘__call__‘, ‘__class__‘, ‘__delattr__‘, ‘__dict__‘, ‘__dictoffset__‘, ‘__doc__‘, ‘__eq__‘, ‘__flags__‘, ‘__format__‘, ‘__ge__‘, ‘__getattribute__‘, ‘__gt__‘, ‘__hash__‘, ‘__init__‘, ‘__instancecheck__‘, ‘__itemsize__‘, ‘__le__‘, ‘__lt__‘, ‘__module__‘, ‘__mro__‘, ‘__name__‘, ‘__ne__‘, ‘__new__‘, ‘__reduce__‘, ‘__reduce_ex__‘, ‘__repr__‘, ‘__setattr__‘, ‘__sizeof__‘, ‘__str__‘, ‘__subclasscheck__‘, ‘__subclasses__‘, ‘__subclasshook__‘, ‘__weakrefoffset__‘, ‘mro‘]

从内部机制来看,因为内建函数和内建方法属于相同的类型,所以对BIF或者BIM调用type()的结果是

>>> type(dir)
<type ‘builtin_function_or_method‘>

注意这不能应用于工厂函数,因为type()正好会返回产生对象的类型

2.用户定义的函数(UDF)

用户定义的函数通常是用Python写的,定义在模块的最高级,因此会作为全局名称空间的一部分装载到系统中。函数也可以在其他函数体内定义,并且由于在2.2中嵌套作用域的改进,我们现在可以对多重嵌套作用域中的属性进行访问。可以用func_closure属性来勾住在其他地方定义的属性。

UDF也有许多属性,其中最特殊和最令人感兴趣的属性列表如下

属性 描述
udf.__doc__ 文档字符串,也可以用udf.func_doc
udf.__name__ 字符串类型的函数名字,也可以用udf.func_name
udf.func_code 字节编译的代码对象
udf.func_defaults 默认的参数元组
udf.func_globals 全局名称空间字典;和从函数内部调用globals(x)一样
udf.func_dict 函数属性的名称空间
udf.func_doc (见上面的udf.__doc__)
udf.func_name (见上面的udf.__name__)
udf.func_closure 包含了自由变量的引用的单元对象元组(自用变量在UDF中使用,但在别处定义)

3.lambda表达式

通过lambda来创建函数的对象除了没有命名之外,享有和用户自定义函数相同的属性,__name__或者func_name属性给定为字符串"<lambda>"。

14.1.2方法

1.内建方法

对于内建方法,type()工厂函数给出了和内建函数相同的输出。此外,内建方法和内建函数两者也享有相同属性,不同之处在于内建方法的__self__属性指向一个Python对象,而内建函数指向None。

对于类和实例都可以通过dir来获取方法属性,对于内建方法也是如此。

2.用户定义的方法(UDM)

用户定义的方法包含在类定义之中,只是拥有标准函数的包装,仅有定义它们的类可以使用。如果没有在子类定义中被覆盖掉,也可以通过子类实例来调用它们。正如13章中解释的,UDM与类对象是关联的(非绑定方法),但是只能通过类的实例来调用(绑定方法)。

属性 描述
udm.__doc__ 文档字符串(与udm.im_fuc.__doc__相同)
udm.__name__ 字符串类型的方法名字(与udm.im_fuc.__name__相同)
udm.__module__ 定义udm的模块的名字(或None
udm.im_class 方法相关联的类(如果是非绑定,那么为要求是udm的类
udm.im_func 方法的函数对象
udm.im_self 如果绑定的话为相关联的实例,否则为None

14.1.3 类

 

14ch

标签:

原文地址:http://www.cnblogs.com/autoria/p/4574300.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!