zoukankan      html  css  js  c++  java
  • [python]魔术方法

    一、初始化

    1、__new__方法,初始化过程中第一个用到的方法(用处不大)。

    2、之后,__init__方法,构造方法。

    3、最后,在对象回收时,调用__del__方法。如果解释器退出时,对象还存在,则不能保证__del__能够执行。

    二、比较

    __cmp__(self, other) 定义了比较的行为。

    __eq__(self, other) 定义了等号的行为, == 。

    __ne__(self, other) 定义了不等号的行为, != 。

    __lt__(self, other) 定义了小于号的行为, < 。

    __gt__(self, other) 定义了大于等于号的行为, >= 。

     1 class Word(str):
     2 '''存储单词的类,定义比较单词的几种方法'''
     3 
     4     def __gt__(self, other):
     5         return len(self) > len(other)
     6     def __lt__(self, other):
     7         return len(self) < len(other)
     8     def __ge__(self, other):
     9         return len(self) >= len(other)
    10     def __le__(self, other):
    11         return len(self) <= len(other)

    三、运算符

    1、一元运算符:正/负/abs(绝对值)/~(取反)

    2、普通运算符:加减乘除/取模/指数/与或等都有对应的魔术方法,以及反运算方法。

    四、类型转换

    __int__(self)实现整型的强制转换。

    五、表现你的类

    __str__(self)定义了str()调用的时候的返回值,人类可读。

    __repr__(self)定义了repr()调用的时候的返回值,机器可读。

    __unicode__(self)定义了unicode()调用的时候的返回值,与str()类似。

    __hash__(self)定义了当hash()调用的时候的返回值,它返回一个整型,用来在字典中快速比较。

    __nozero__(self)定义了bool()调用时候的返回值。

    六、控制属性访问

     __getattr__(self, name) 可以定义当用户试图获取一个不存在属性时的行为。适用于对普通拼写错误的获取和重定向。

    __setattribute__(self, name) 可以定义当用户获取属性时的行为。

    __setattr__(self, name) 可以定义当用户设置属性时的行为。

    __delattr__(self, name) 可以定义当用户删除属性时的行为。

    七、序列

     1 class FunctionalList:
     2     '''一个封装了一些附加魔术方法比如 head, tail, init, last, drop, 和take的列表类。
     3     '''
     4 
     5     def __init__(self, values=None):
     6         if values is None:
     7             self.values = []
     8         else:
     9             self.values = values
    10 
    11         def __len__(self):
    12             return len(self.values)
    13 
    14         def __getitem__(self, key):
    15         #如果键的类型或者值无效,列表值将会抛出错误
    16             return self.values[key]
    17 
    18         def __setitem__(self, key, value):
    19             self.values[key] = value
    20 
    21         def __delitem__(self, key):
    22             del self.values[key]
    23 
    24         def __iter__(self):
    25             return iter(self.values)
    26 
    27         def __reversed__(self):
    28             return reversed(self.values)
    29 
    30         def append(self, value):
    31             self.values.append(value)
    32         def head(self):
    33             return self.values[0]
    34         def tail(self):
    35             return self.values[1:]
    36         def init(self):
    37             #返回一直到末尾的所有元素
    38             return self.values[:-1]
    39         def last(self):
    40             #返回末尾元素
    41             return self.values[-1]
    42         def drop(self, n):
    43             #返回除前n个外的所有元素
    44             return self.values[n:]
    45         def take(self, n):
    46             #返回前n个元素
    47             return self.values[:n]

    八、反射

    isinstance()对应于__instancecheck__(self, instance)

    issubclass()对应于__subclasscheck__(self, instance)

    九、可以调用的对象__call__(self, args),主要用于改变实例的状态。

    十、会话管理,__enter__和__exit__

    十一、序列化对象

  • 相关阅读:
    HDU——1061Rightmost Digit(高次方,找规律)
    HDU——1019Least Common Multiple(多个数的最小公倍数)
    HDU——1013Digital Roots(九余数定理)
    HDU——1020Encoding(水题,string过)
    HDU——2093考试排名(string类及其函数的运用以及istringstream)
    廖雪峰Java3异常处理-2断言和日志-4使用Log4j
    廖雪峰Java3异常处理-2断言和日志-3使用Commons Logging
    廖雪峰Java3异常处理-2断言和日志-2使用JDK Logging
    廖雪峰Java3异常处理-2断言和日志-1使用断言
    Charles问题
  • 原文地址:https://www.cnblogs.com/zhizouxiao/p/3780925.html
Copyright © 2011-2022 走看看