抽象类的子类化机制
抽象类:可以作为顶层基类,从高层次规范编程接口
1、在abc模块中,最常见的抽象类有Iterable,我们可以用他判断一个对象是不是可迭代对象
1 from collections.abc import Iterable 2 3 4 class Valley: 5 6 def __iter__(self): 7 ... 8 9 10 if __name__ == "__main__": 11 print(isinstance(Valley(), Iterable))
output:
True
2、抽象类的子类化机制
2.1、重写__subclasshook__类方法,定制抽象类的子类判断逻辑,这种子类化形式只关心结构,不关心真实的继承关系,称之为:结构化子类
1 import abc 2 3 4 class A(abc.ABC): 5 @classmethod 6 def __subclasshook__(cls, c): 7 if any("verify" in b.__dict__ for b in c.__mro__): 8 return True 9 return False 10 11 12 class Valley: 13 def __init__(self): 14 ... 15 16 def verify(self): 17 print(1) 18 19 20 if __name__ == "__main__": 21 print(isinstance(Valley(), A))
output:
True
2.2、继承抽象基类元类register方法直接注册
1 import abc 2 3 4 class A(abc.ABC): 5 ... 6 7 8 class Valley: 9 def __init__(self): 10 ... 11 12 def verify(self): 13 print(1) 14 15 16 A.register(Valley) 17 if __name__ == "__main__": 18 print(isinstance(Valley(), A))
目前未找到合适的应用场景,希望知晓的可以在下面写个小demo,我参考参考
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!