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