最近需要重新定义类,老是会忘记python内置方法的的作用和名称,mark一下加深一下记忆。

基本上python的常见内置方法如下面所示:

 内置方法                      说明 

__init__(self,...)          初始化对象,在创建新对象时调用 

__del__(self)               释放对象,在对象被删除之前调用 

__new__(cls,*args,**kwd)    实例的生成操作 

__str__(self)               在使用print语句时被调用 

__getitem__(self,key)       获取序列的索引key对应的值,等价于seq[key] 

__len__(self)               在调用内联函数len()时被调用 

__cmp__(stc,dst)            比较两个对象src和dst 

__getattr__(s,name)         获取属性的值,等价于点调用(例如a.(...)假如重定义一个字典类,则a[b]等价于a.b)) 

__setattr__(s,name,value)   设置属性的值,等价于点设置(a[b]=1,a.b=1)

__delattr__(s,name)         删除name属性 

__getattribute__()          __getattribute__()功能与__getattr__()类似 

__gt__(self,other)          判断self对象是否大于other对象 

__lt__(slef,other)          判断self对象是否小于other对象__ge__(slef,other) 判断self对象是否大于或者等于other对象__le__(slef,other) 判断self对象是否小于或者等于other对象__eq__(slef,other) 判断self对象是否等于other对象__call__(self,*args) 把实例对象作为函数调用


下面po一下我重定义字典的代码

class Dict(dict):
    '''
    Simple dict but support access as x.y style.
    '''
    #初始化已实例化后的所有父类对象,方便后续使用或扩展父类中的行为:
    def __init__(self, names=(), values=(), **kw):
        super(Dict, self).__init__(**kw)
        #zip([seql, ...])接受一系列可迭代对象作为参数,将对象中对应的元素打包成一个个tuple(元组),然后返回由这些tuples组成的list(列表)。
        # 若传入参数的长度不等,则返回list的长度和参数中长度最短的对象相同。
        for k, v in zip(names, values):
            self[k] = v
    #属性动态化处理;当使用点号获取类实例属性时,如果属性不存在就自动调用__getattr__方法。
    def __getattr__(self, key):     #此处为:提取字典内,指定key值的value,没找到则抛出异常。
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Dict' object has no attribute '%s'" % key)

    #属性赋值;当设置类实例属性时自动调用。
    def __setattr__(self, key, value):      #此处为:设置字典对值。
        self[key] = value