五、魔法方法
在python中, _ _xxx _ _()这样的方法就叫做魔法方法,指的是具有特殊功能的函数,在特定的场景下有特定的作用,在特定的场景下或出发特定的功能。
1、init魔法方法
详见上节。
2、带参数的init魔法方法
该方法可以解决属性不能改动的问题;即在定义该方法的时候传入所需要的形参,在创建对象的时候传入实参。
举例:
class Dog:
def __init__(self, name, color, age):
self.dog_name = name
self.dog_color = color
self.dog_age = age
def print_info(self):
print(f'狗狗的名字:{self.dog_name}\n'
f'颜色:{self.dog_color}\n'
f'年龄:{self.dog_age}')
dog = Dog('豆子', '白色', '2')
dog.print_info()
3、str魔法方法
当print输出一个对象的时候,默认打印出对象的内存空间地址;如果在类中定义了str魔法方法之后,再打印对象时,就打印的str这个魔法方法的返回值。即定义str魔法方法时,必须要有一个返回值,该返回值是对类的说明、描述、状态等。
举例:
class Dog:
def __init__(self):
print('汪!汪!汪!')
def __str__(self):
"""Dog类的描述"""
return '狗属于脊索动物门、脊椎动物亚门...'
dog = Dog()
print(dog)
# 汪!汪!汪!
# 狗属于脊索动物门、脊椎动物亚门...
4、del魔法方法
当删除一个对象的时候,python解释器就会自动调用del魔法方法。即先执行对象,对象执行结束之后就将对象自动删除掉。
举例:
class Dog:
def __init__(self):
print('汪!汪!汪!')
def __del__(self):
"""删除对象"""
print(f'对象{self}已经删除!')
douzi = Dog()
print(douzi)
# 汪!汪!汪!
# <__main__.Dog object at 0x0000025428ED92B0>
# 对象<__main__.Dog object at 0x0000025428ED92B0>已经删除!
5、call魔法方法
当一个类中实现了call魔法方法之后,那么这个类创建的实例对象就是一个可调用对象,当调用这个实例对象的时候,默认执行call魔法方法下面的代码。
举例:
class Dog(object):
def __init__(self):
self.name = '豆子'
def __call__(self, *args, **kwargs):
print('这是个call魔法方法')
douzi = Dog()
# 调用对象,默认执行call魔法方法下的代码
douzi()