python 魔术方法

发布时间 2023-06-28 15:46:07作者: 凡人半睁眼

一、什么是魔术方法

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)))