码迷,mamicode.com
首页 > 编程语言 > 详细

python深入学习01 特殊方法

时间:2014-07-22 00:18:37      阅读:255      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   strong   

Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来编写相同功能的程序(还有函数式、声明式等,我们暂不深入)。Python的多范式依赖于Python对象中的特殊方法(special method)。

特殊方法名的前后各有两个下划线。特殊方法又被成为魔法方法(magic method),定义了许多Python语法和表达方式。当对象中定义了特殊方法的时候,Python也会对它们有“特殊优待”。比如定义了__init__()方法的类,会在创建对象的时候自动执行__init__()方法中的操作。

(可以通过dir()来查看对象所拥有的特殊方法,比如dir(1))

 

运算符与内置函数


 Python的运算符是通过调用对象的特殊方法实现的。比如:

abc + xyz               # 连接字符串

实际执行了如下操作:

‘abc’.__add__(xyz)

所以,在python中,想知道两个对象是否能相加,先要看两个对象是否相应的__add__()方法。一旦相应的对象有__add__()方法,即使这个对象从数学上不可加,我们都可以用加法的形式,来表达obj.__add__()所定义的操作。在Python中,运算符起到简化书写的功能,但它依靠特殊方法实现。

 

>>> dir(1)
[__abs__, __add__, __and__, __class__, __cmp__, __coerce__, __delattr__, __div__, __divmod__, __doc__, __float__, __floordiv__, __format__, __getattribute__, __getnewargs__, __hash__, __hex__, __index__, __init__, __int__, __invert__, __long__, __lshift__, __mod__, __mul__, __neg__, __new__, __nonzero__, __oct__, __or__, __pos__, __pow__, __radd__, __rand__, __rdiv__, __rdivmod__, __reduce__, __reduce_ex__, __repr__, __rfloordiv__, __rlshift__, __rmod__, __rmul__, __ror__, __rpow__, __rrshift__, __rshift__, __rsub__, __rtruediv__, __rxor__, __setattr__, __sizeof__, __str__, __sub__, __subclasshook__, __truediv__, __trunc__, __xor__, bit_length, conjugate, denominator, imag, numerator, real]
>>> 1 + 2
3
>>> (1).__add__(2)
3
>>> 1 - 3
-2
>>> (1).__sub__(3)
-2
>>> (1).__str__()  
‘1‘

 

__call__()


 在Python中,函数也是一种对象。实际上,任何一个有__call__()特殊方法的对象都被当作是函数。这是比较特殊的地方。

 

#!/usr/bin/env python

class SampleFunc(object):
    def __call__(self, a):
        return a + 5

add = SampleFunc()     # A function object
print(add(2))          # Call function    
map(add, [2, 4, 5])    # Pass around function object

 

add为SampleMore类的一个对象,当被调用时,add执行加5的操作。add还可以作为函数对象,被传递给map()函数。

 

 

 

 

 

 

 

 

python深入学习01 特殊方法,布布扣,bubuko.com

python深入学习01 特殊方法

标签:style   blog   color   使用   os   strong   

原文地址:http://www.cnblogs.com/zlcxbb/p/3858477.html

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