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('结束上下文管理')