一、什么是魔术方法
1、魔术方法是一组具有特殊命名和行为的特殊方法,它们允许您自定义类的行为。这些方法使用双下划线(__)作为前缀和后缀,因此也被称为双下划线方法或特殊方法。
2、需要掌握每个方法什么时候触发或者执行
二、常见的魔术方法
1、__init__方法
初始化方法,当一个类被调用产生实例对象,自动触发,它可以用来初始化对象的属性和执行其他必要的设置。
2、__str__和__repr__方法
class Student(): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender def __str__(self): print('str') return '%s %s' % (self.name, self.age) def __repr__(self): print('repr') return '%s' % self.name stu = Student('kevin', 18, 'male') print(stu) # str # kevin 18
注:
__str__和__repr__差不多,同时使用时,__str__会被优先执行,__repr__不执行
当打印或者输出对象的时候,会自动触发__str__(self)的执行
__str__(self)
: 只能返回字符串,它被print()函数和str()函数调用,可以用来自定义对象的打印输出。
__repr__(self)
: 返回对象的可打印表示。它被repr()函数调用,通常用于调试目的。
3、_len__(self)
: 返回对象的长度。它被len()函数调用,用于获取对象的元素个数。
4、__del__方法
用于定义对象被销毁(垃圾回收)时的行为。它在对象的引用计数达到零时自动被调用。
class Student(): def __init__(self, name, age, gender): self.name = name self.age = age self.gender = gender self.f = open("a.txt", "w", encoding="utf8") # 我执行了: # 1. 当删除对象的时候,会自动触发函数的执行 # 2. 当程序结束的时候,也会自动触发执行 def __del__(self): print("我执行了") """可以做一些清理垃圾的操作""" self.f.close() stu = Student("kevin", 19, 'male') # del stu # 有删除对象的操作,会立即触发__del__(self) print("1") print("12") print("123") # 1 # 12 # 123 # 我执行了
注:
当对象被销毁会触发执行__del__(self)
没有对象被销毁操作时,程序代码执行完也会触发执行__del__(self)
5、 isinstance(obj,cls) 和 issubclass(sub,super)
isinstance(obj,cls) 函数判断对象是不是由某个类实例化的,返回布尔值
issubclass(sub,super) 函数也可以用于检查一个类是否是多个类中的任何一个类的子类
print(issubclass(Dog, (Animal, Mammal)))