码迷,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
迷上了代码!