您的位置:首页 > 编程语言 > Python开发

python中魔法属性和魔法方法

2015-10-11 18:13 691 查看
1.魔法方法|魔法属性

在python中,有的名称会在前面和后面都加上两个下划线,例如__future__、__init__、__del__以及__new__等等,这些特殊的名称,在python中就称为魔法方法或魔法属性。

例如:

(1)__new__ 是创建类的对象的函数,相当于C++中构造函数。

(2)__init__ 会在__new__之后被调用,用来初始化对象的。

(3)__del__ 是对象将要被销毁的时候被调用,用来将对象所占用的内存资源释放给操作系统,相当于C++中的析构函数。

2.魔法方法和魔法属性的使用

在python中,魔法方法和一些用户操作是对应的。一些魔法方法直接和内建函数对应,这种情况下,如何调用它们是显而易见的。然而,另外的情况下,调用魔法方法的途径并不是那么明显。如下列举除了一些常见的魔法方法的使用场景:

魔法方法什么时候被调用解释
__new__(cls [,...])instance = MyClass(arg1, arg2)__new__在实例创建时调用
__init__(self [,...])instance = MyClass(arg1,arg2)__init__在实例创建时调用
__cmp__(self)self == other, self > other 等进行比较时调用
__pos__(self)+self一元加法符号
__neg__(self)-self一元减法符号
__invert__(self)~self按位取反
__index__(self)x[self]当对象用于索引时
__nonzero__(self)bool(self)对象的布尔值
__getattr__(self, name)self.name #name不存在访问不存在的属性
__setattr__(self, name)self.name = val给属性赋值
__delattr_(self, name)del self.name删除属性
__getattribute__(self,name)self.name访问任意属性
__getitem__(self, key)self[key]使用索引访问某个元素
__setitem__(self, key)self[key] = val使用索引给某个元素赋值
__delitem__(self, key)del self[key]使用索引删除某个对象
__iter__(self)for x in self迭代
__contains__(self, value)value in self, value not in self使用in进行成员测试
__call__(self [,...])self(args)“调用”一个实例
__enter__(self)with self as x:with声明的上下文管理器
__exit__(self, exc, val, trace)with self as x:with声明的上下文管理器
__getstate__(self)pickle.dump(pkl_file, self)Pickling
__setstate__(self)data = pickle.load(pkl_file)Pickling
详细内容参见:《Python魔法方法指南
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: