Python神奇方法

Posted by Bokala on May 11, 2016

何谓“神奇方法”?在Python中我们常见一些带双下划线的方法,__init__(), __It__() 这些方法怎么使用,我在下面进行阐述介绍。

1. 构建和初始化

__new__(cls,[...])

对象实例化时,__new__方法是第一个被调用的方法,该方法不常使用。

__init__(self,[...])

类的初始化方法,该方法会获取初始构建调用传递的任何参数。

__del__(self)

若称__init____new__为Python的构造器,那么__del__就是析构器,它被定义为当一个对象被垃圾回收时的行为。

eg.

from os.path import join
class FileObject:
    '''
    对文件对象的包装,确保文件在关闭时得到删除
    '''

    def __init__(self, filepath='~', filename='demo.txt'):
        self.file = open(join(filepath, filename), 'r+')

    def __del__(self):
        self.file.close()
        del self.file

2. 操作费在自定义类中的工作机制

2.1 比较操作符

__cmp__(self, other)
__eq__(self, other)

定义了相等操作符, == 行为

__ne__(self, other)

定义了不相等操作符, != 行为

__lt__(self, other)

定义了小于操作符, < 行为

__gt__(self, other)

定义了大于操作符, > 行为

__le__(self, other)

定义了小于等于操作符, <= 行为

__ge__(self, other)

定义了大于等于操作符, >= 行为

eg.

class Word(str):
    ```
    单词类,比较定义基于单词长度
    ```

    def __new__(cls, word):
        if ' ' in word:
            print "单词中包含空格,截断到第一部分"
            word = word[:word.index(' ')]
        return str.__new__(cls, word)

    def __gt__(self, other):
        return len(self) > len(other)

    def __lt__(self, other):
        return len(self) < len(other)

    def __ge__(self, other):
        return len(self) >= len(other)

    def __le__(self, other):
        return len(self) <= len(other)

2.2 数字

  • 一元操作符 ```Python

    实现正数行为

    pos(self)

实现负数行为

neg(self)

实现内建abs()行为

abs(self)

实现~操作符进行的取反操作

invert(self)


* 常规算术操作符

```Python