Python(2.7.6) 特殊方法

  

在 Python 中有种特殊方法,也称为魔法方法。特殊方法的方法名的前后各有两个下划线,如__init__,这种拼写表示名字有特殊的意义。如果类实现了这些方法中的某一个,那么这个方法会在特殊的情况下被调用。

可以使用 dir()  查看对象实现的特殊方法。

>>> dir(list)
[__add__, __class__, __contains__, __delattr__, __delitem__, __delslice__, __doc__, __eq__, __format__, __ge__, __getattribute__, __getitem__, __getslice__, __gt__, __hash__, __iadd__, __imul__, __init__, __iter__, __le__, __len__, __lt__, __mul__, __ne__, __new__, __reduce__, __reduce_ex__, __repr__, __reversed__, __rmul__, __setattr__, __setitem__, __setslice__, __sizeof__, __str__, __subclasshook__, append, count, extend, index, insert, pop, remove, reverse, sort]

 

当类实现了 __init()__ 方法,在创建对象的时候会自动调用 __init()__ 方法。

 

当使用运算符进行运算的时候,实际上是通过调用对象的特殊方法实现的,如:
  [1, 2] + [3, 4, 5]
实际执行的操作是:
  [1, 2].__add__([3, 4, 5])
所以,如果想实现类似于 C++ 中的运算符重载,让自定义的类对象通过运算符进行运算,只要在自定义的类中实现相应的特殊方法即可:

class MyObject(object):
    
    def __init__(self, size = 0):
        super(MyObject, self).__init__()
        self.size = size

    def __add__(self, obj):
        if isinstance(obj, MyObject) :
            return MyObject(self.size + obj.size)
        else :
            raise TypeError(can only concatenate MyObject (not "%s") to MyObject % type(obj))

obj = MyObject(2) + MyObject(3)
print obj.size

 

许多内置函数也是调用对象的特殊方法,如:
  len(‘hello world‘)
实际执行的操作是
  ‘hello world‘.__len__()

 

在 Python 中,一切皆对象,函数也是一个对象。实际上,实现了 __call__() 方法的对象都可以当作一个函数。

class Square(object):    
    def __call__(self, n):
        return n ** 2

square = Square()
print square(10)

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。