面向对象-抽象类
什么是抽象类?
不完整的一种类。
具有抽象方法的类就是抽象类。
什么是抽象方法?
不完整的方法
没有方法体的方法就是抽象方法。
什么是元类?
元类就是用来制作类的类。
正常情况下所有类的元类默认都是type
如何查看一个类的元类
类.__class__
type(类)
查询数据类型
type(对象)
对象.__class__
注意:正常情况下type是系统默认的元类
抽象类的特征:
1.抽象类不能实例化使用
2.抽象类中可以存在抽象方法,也可以存在正常的方法
3.抽象类中是否可以添加成员属性
4.抽象类的使用方式就是被其他类继承。
5.其他类继承了抽象类并且实现了抽象类的所有抽象方法之后就可以实例化该类!
抽象类的实际作用:
1.指定开发程序规范
2.协同程序开发,加速开发效率
抽象类1
1 ''' 2 关于元类: 3 ''' 4 ''' 5 #定义一个普通的类? 6 class Car: 7 pass 8 9 #查看类的元类1 10 print(type(Car)) 11 #查看类的元类2 12 print(Car.__class__) 13 ''' 14 15 #声明抽象类 16 #导入抽象类的功能模块 17 import abc 18 class User(metaclass = abc.ABCMeta):#注意制作抽象类必须另外指定元类 19 #属性 20 id = 999 21 22 #定义方法 23 24 #添加用户的方法 对象方法 -> 抽象的对象方法 25 @abc.abstractmethod 26 def user_add(self): 27 pass 28 29 #修改用户的方法 类方法 -> 抽象的类方法 30 @abc.abstractclassmethod 31 def user_update(cls): 32 pass 33 34 #删除用户的方法 绑定类的方法 - > 抽象的绑定类的方法 35 @abc.abstractmethod 36 def user_del(): 37 pass 38 39 #查找用户的方法 静态方法 -> 抽象的静态方法 40 @abc.abstractstaticmethod 41 def user_find(): 42 pass 43 44 #抽象类中可以有正常的方法 45 def user_lock(self): 46 print('封禁用户的方法') 47 48 #尝试实例化抽象类User 49 #u = User() 50 51 #声明一个类继承User类来使用 52 class MyUser(User): 53 #实现所有抽象类中的方法 54 # 添加用户的方法 对象方法 55 def user_add(self): 56 print('这是一个添加用户的方法') 57 58 # 修改用户的方法 类方法 59 @classmethod 60 def user_update(cls): 61 print('这是一个设置用户的方法') 62 63 # 删除用户的方法 绑定类的方法 64 def user_del(): 65 print('这是一个删除用户的方法') 66 67 # 查找用户的方法 静态方法 68 @staticmethod 69 def user_find(): 70 print('这是一个查找用户的方法') 71 72 #实例化MyUser类 73 mu = MyUser() 74 #print(mu) 75 #输出结果:<__main__.MyUser object at 0x000002DBE8A100F0> 76 77 #调用方法 78 #调用user_lock方法 79 #mu.user_lock() 80 #输出结果:封禁用户的方法 81 82 #调用user_add方法 83 #mu.user_add() 84 #输出结果:这是一个添加用户的方法 85 86 #调用user_update方法 87 #MyUser.user_update() 88 #输出结果:这是一个设置用户的方法 89 90 #调用user_del的方法 91 #MyUser.user_del() 92 #输出结果:这是一个删除用户的方法 93 94 #调用user_find方法 95 #mu.user_find() 96 #输出结果:这是一个查找用户的方法
抽象类2 【指定了开发的规则】
1 #声明抽象类 【指定了开发的规则】 2 #导入抽象类的功能模块 3 import abc 4 class User(metaclass = abc.ABCMeta):#注意制作抽象类必须另外指定元类 5 #属性 6 id = 999 7 8 #定义方法 9 10 #添加用户的方法 对象方法 -> 抽象的对象方法 【小赵】 11 @abc.abstractmethod 12 def user_add(self): 13 pass 14 15 #修改用户的方法 类方法 -> 抽象的类方法 【小钱】 16 @abc.abstractclassmethod 17 def user_update(cls): 18 pass 19 20 #删除用户的方法 绑定类的方法 - > 抽象的绑定类的方法 【小孙】 21 @abc.abstractmethod 22 def user_del(): 23 pass 24 25 #查找用户的方法 静态方法 -> 抽象的静态方法 【小李】 26 @abc.abstractstaticmethod 27 def user_find(): 28 pass 29 30 #抽象类中可以有正常的方法 【自己】 31 def user_lock(self): 32 print('封禁用户的方法') 33 34 35 #小赵的工作 [但是可以在一个单独的文件中开发] 36 class XZUser(User): 37 # 添加用户的方法 对象方法 【小赵】 38 def user_add(self): 39 print('添加用户的方法-小赵完成的') 40 41 42 #小钱的工作[但是可以在一个单独的文件中开发] 43 class XQUser(XZUser): 44 # 修改用户的方法 类方法 【小钱】 45 @classmethod 46 def user_update(cls): 47 print('设置用户的方法-小钱完成的') 48 49 #小孙的工作[但是可以在一个单独的文件中开发] 50 class XSUser(XQUser): 51 # 删除用户的方法 绑定类的方法【小孙】 52 def user_del(): 53 print('删除用户的方法-小孙完成的') 54 55 #小李的工作[但是可以在一个单独的文件中开发] 56 class XLUser(XSUser): 57 # 查找用户的方法 静态方法 -> 抽象的静态方法 【小李】 58 @staticmethod 59 def user_find(): 60 print('查找用户的方法-小李完成的') 61 62 #这里可以使用小李的类 63 u = XLUser() 64 65 #调用方法 66 #u.user_lock() 67 #输出结果:封禁用户的方法 68 69 #u.user_add() 70 #输出结果:添加用户的方法-小赵完成的 71 72 #XLUser.user_update() 73 #输出结果:设置用户的方法-小钱完成的 74 75 #XLUser.user_del() 76 #输出结果:删除用户的方法-小孙完成的 77 78 #u.user_find() 79 #输出结果:查找用户的方法-小李完成的