魔法方法
魔法方法是一种方法,它总是被双下划线包围,如__init__.
魔法方法的“魔法”之处体现在:它们总能够在适当的时候被自动调用。
魔法方法的第一个参数为cls(类方法)或者self (实例方法)。
- cls:代表一个类的名称
- self:代表一个实例对象的名称。
下面介绍几个基础的魔法方法:
__init__(self[,...])
这个方法是在初始化对象的时候用的,用法如下:
class Restaurant():
def __init__(self,restaurant_name,cuisine_type,number_served=0):
self.restaurant_name=restaurant_name
self.cuisine_type=cuisine_type
下面运行一下:
>>> my_restaurant=Restaurant("北京饭店","各大菜系")
>>> my_restaurant.restaurant_name
'北京饭店'
2.__new__
init 构造器,当一个实例被创建的时候初始化的方法。但是它并不是实例化调用的第一个方法,__new__才是实例化对象调用的第一个方法,它只取下 cls参数,并把其他参数传给 init。 __new__很少使用,但是也有它适合的场景,尤其是当类继承自一个像元组或者字符串这样不经常改变的类型的时候。
new 使用时注意以下四点:
1. __new__ 是在一个对象实例化的时候所调用的第一个方法
2. 它的第一个参数是这个类,其他的参数是用来直接传递给 __init__ 方法
3. __new__ 决定是否要使用该 __init__ 方法,因为 __new__ 可以调用其他类的构造方法或者直接返回别的实例对象来作为本类的实例,如果 __new__ 没有返回实例对象,则 __init__ 不会被调用
4. __new__ 主要是用于继承一个不可变的类型比如一个 tuple 或者 string
5. __new__ return的是一个构建的实例
另外,Python中还有以下常用的魔法方法:
call(self[,args…])
getitem(self,key)
setitem(self,key,value)
getattr(self,name)
getattribute(self,name)
setattr(self,name,value)
delattr(self,name)
get(self,instance,owner)
set(self,instance,value)
delete(self,instance)