1. 基本魔法方法
- _new_(cls[,…])
对象实例化时调用的第一个方法,第一个参数是这个类,其余参数传递给__init__
- _init_(self[,…])
构造器,实例被创建时调用的初始化方法
- _del_(self)
析构器,实例被销毁时调用的方法
- _call_(self[,args…])
允许一个类的实例像函数一样被调用:x(a,b)调用x._call_(a,b)
- _class_
获得已知实例的类别时:对象a._class_(),得到的其实就是这个类A,进而可以访问A的属性
- _bases_
获取指定类的所有父类构成元素,使用方法为:类名A._bases_
- _len_(self)
定义当被len()调用时的行为
- _repr_(self)
定义当被repr()调用时的行为
- _str_(self)
定义当被str()调用时的行为,print(a)时默认调用
- _all_
_all_=['函数名或方法名']的方式限制一下哪些函数或方法可以被导入,__all__魔法方法只针对通过 from xx import *这种导入方式有效
- _bytes_(self)
定义当被bytes()调用时的行为,直接输出a时默认调用
- _hash_(self)
定义当被hash()调用时的行为
- _bool_(self)
定义当被bool()调用时的行为
- _format_(self)
定义当被format()调用时的行为
2. 有关属性
- _getattr_(self,name)
定义当用户试图获取一个不存在的属性时的行为
def__setattr__(self, name, value):
self.name = value
def__setattr__(self, name, value):
self.__dict__[name] = value
- _getattribute_(self,name)
定义当该类的属性被访问时的行为
- _setattr_(self,name,value)
定义当一个属性被设置时的行为
- _delattr_(self,name)
定义当一个属性被删除时的行为
- _dir_(self)
定义当dir()被调用时的行为
- _get_, _set_, _delete_: 一个类要成为描述器,必须实现这三个中至少一个方法
3. 自定义容器
- ** _len_(self)、_getitem_(self,key)**:定义不可变容器
- _len_(self)、_getitem_(self,key)、_setitem_(self,key,value)、_delitem_(self,key):定义可变容器