10个Python常用魔法函数小结

Python是一门非常流行的编程语言,通过使用Python,我们可以完成各种各样的任务。

Python中有很多内置的函数和方法,它们可以帮助我们更好地完成编程任务。

其中,魔法函数是Python中非常重要的一部分。

在本文中,我们将为Python编程小白介绍10个常用的魔法函数,并提供对应的代码案例,帮助读者更好地理解和掌握Python编程。



一、__init__函数

__init__函数是Python中非常常用的一个魔法函数。它是在对象被创建时自动调用的函数,用于初始化对象的属性。下面是一个示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

person = Person('小明', 18)
print(person.name)
print(person.age)


运行上面的代码,输出结果如下:

小明
18


我们可以看到,__init__函数初始化了Person对象的name和age属性,并通过实例化Person类创建了一个名为person的对象。在输出中,我们可以看到person对象的name属性为“小明”,age属性为18。



二、__str__函数


__str__函数是Python中用于打印对象信息的魔法函数。它在对象被打印时自动调用,用于返回对象的字符串表示形式。下面是一个示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return '姓名:' + self.name + ' 年龄:' + str(self.age)

person = Person('小明', 18)
print(person)


运行上面的代码,输出结果如下:

姓名:小明 年龄:18


我们可以看到,__str__函数返回了一个字符串表示形式,包含了person对象的姓名和年龄属性。



三、__len__函数


__len__函数是Python中用于获取对象长度的魔法函数。它在调用len()函数时自动调用,用于返回对象的长度。下面是一个示例:

class MyList:
    def __init__(self, *args):
        self.data = list(args)

    def __len__(self):
        return len(self.data)

my_list = MyList(1, 2, 3, 4, 5)
print(len(my_list))


运行上面的代码,输出结果如下:

5


我们可以看到,__len__函数返回了my_list对象的长度,即5。



四、__getitem__函数


__getitem__函数是Python中用于获取对象元素的魔法函数。它在调用对象索引时自动调用,用于返回对象的元素。下面是一个示例:

class MyList:
    def __init__(self, *args):
        self.data = list(args)

    def __getitem__(self, index):
        return self.data[index]

my_list = MyList(1, 2, 3, 4, 5)
print(my_list[0])
print(my_list[2])


运行上面的代码,输出结果如下:

1
3


我们可以看到,__getitem__函数返回了my_list对象的第一个和第三个元素,即1和3。



五、__setitem__函数


__setitem__函数是Python中用于设置对象元素的魔法函数。它在调用对象索引赋值时自动调用,用于设置对象的元素。下面是一个示例:

class MyList:
    def __init__(self, *args):
        self.data = list(args)

    def __setitem__(self, index, value):
        self.data[index] = value

my_list = MyList(1, 2, 3, 4, 5)
my_list[0] = 0
print(my_list.data)


运行上面的代码,输出结果如下:

[0, 2, 3, 4, 5]


我们可以看到,__setitem__函数将my_list对象的第一个元素设置为0,并输出了my_list对象的所有元素。



六、__getattr__函数


__getattr__函数是Python中用于获取对象属性的魔法函数。它在获取对象属性失败时自动调用,用于返回对象的属性值。下面是一个示例:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __getattr__(self, attr):
        return '没有找到属性:' + attr

person = Person('小明', 18)
print(person.gender)


运行上面的代码,输出结果如下:

没有找到属性:gender


我们可以看到,__getattr__函数返回了一个字符串,表示没有找到person对象的gender属性。



七、__call__函数


__call__函数是Python中用于调用对象的魔法函数。它在调用对象时自动调用,用于执行对象的操作。下面是一个示例:

class Add:
    def __call__(self, x, y):
        return x + y

add = Add()
print(add(1, 2))


运行上面的代码,输出结果如下:

3


我们可以看到,__call__函数将add对象作为一个函数调用,并返回了1加2的结果。



八、__enter__和__exit__函数


__enter__和__exit__函数是Python中用于管理资源的魔法函数。它们在with语句块中自动调用,用于管理资源的获取和释放。下面是一个示例:

class MyFile:
    def __init__(self, filename):
        self.filename = filename

    def __enter__(self):
        self.file = open(self.filename, 'r')
        return self.file

    def __exit__(self, type, value, trace):
        self.file.close()

with MyFile('test.txt') as f:
    print(f.read())


运行上面的代码,输出结果如下:

这是一个测试文件。


我们可以看到,__enter__函数打开了名为test.txt的文件,并返回了文件对象,而__exit__函数关闭了文件。



九、__iter__和__next__函数


__iter__和__next__函数是Python中用于迭代器的魔法函数。它们在迭代器被创建和执行下一个迭代时自动调用。下面是一个示例:

class MyRange:
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def __iter__(self):
        return self

    def __next__(self):
        if self.start >= self.end:
            raise StopIteration
        value = self.start
        self.start += 1
        return value

my_range = MyRange(1, 5)
for i in my_range:
    print(i)


运行上面的代码,输出结果如下:

1
2
3
4


我们可以看到,__iter__函数返回了my_range对象本身,而__next__函数返回了my_range对象的下一个值。



十、__del__函数


__del__函数是Python中用于对象销毁的魔法函数。它在对象被销毁时自动调用,用于执行对象的清理操作。下面是一个示例:

class Person:
    def __init__(self, name):
        self.name = name

    def __del__(self):
        print(self.name + '被销毁了。')

person = Person('小明')
del person


运行上面的代码,输出结果如下:

小明被销毁了。


我们可以看到,__del__函数在person对象被销毁时自动调用,输出了一个字符串。

猿教程
请先登录后发表评论
  • 最新评论
  • 总共0条评论