python的魔法方法

 1 '''
 2 类有几个魔法方法是经常使用的
 3 '''
 4 class CreateNumberException(Exception):
 5     '''
 6     这是一个自定义异常类
 7     '''
 8     def __str__(self):
 9         print('改类的实例化对象已经超过5')
10 
11 class Test(object):
12     create_number = 0
13     def __init__(self):
14         '''
15         初始化函数
16         '''
17         self.a = 1
18     def __str__(self):
19         '''
20         当类被像变量一样调用时执行  如:test=Test
21         :return:
22         '''
23         print(self.a)
24     def __call__(self, *args, **kwargs):
25         '''
26         允许一个类像函数一样被调用  如: Test()
27         :param args:
28         :param kwargs:
29         :return:
30         '''
31         print('************')
32     def __new__(cls, *args, **kwargs):
33         '''
34         当对象被创建的时候执行(先于__init__),在实例被创建后,返回了这个实例,才会去执行init,初始化类的一些属性
35         在这里和下面的 __del__ 结合实现了类对象的创建次数限制
36         :param args:
37         :param kwargs:
38         :return:
39         '''
40         cls.create_number += 1
41         if cls.create_number > 5:
42             raise CreateNumberException
43 
44     def __del__(self):
45         '''
46         当对象被销毁的时候执行
47         :return:
48         '''
49         self.__class__.create_number -= 1
50     def __enter__(self):
51         '''
52         定义当使用 with 语句时的初始化行为
53         进入上下文管理(with语句)
54         :return:
55         '''
56         print('进入上下文管理')
57 
58     def __exit__(self, exc_type, exc_val, exc_tb):
59         '''
60         定义当使用 with 语句时的结束行为
61         结束上下文管理(with语句)
62         exc_type如果抛出异常,这里获取异常的类型
63         exc_val如果抛出异常,这里显示异常内容
64         exc_tb如果抛出异常,这里显示所在位置
65         '''
66         print('结束上下文管理')
原文地址:https://www.cnblogs.com/arrow-kejin/p/10410796.html