钩子函数
控制子类的的创建
1、元类
这种方式可能是最常见的也是我们最先知晓的,当然这种方式可能需要我们对元类有比较深入的了解,所以引入了下面的这种方式
2、钩子函数
__init__subclass__,字面意思,父类实现了该双下方法,其后凡是继承他的派生类,都会触发此方法,进行派生类的初始化,实现派生类属性的增加及修改
1 class Meta: 2 def __init_subclass__(cls, **kwargs): 3 # 改变子类行为,增加类属性 4 cls.origin_val = "只有永不遏制的奋斗" 5 for k in kwargs: 6 setattr(cls, k, kwargs[k]) 7 8 # 增加类方法 9 def overwrite(): 10 print("测试") 11 12 setattr(cls, "func", overwrite) 13 14 15 class A(Meta, name="g", age=26): 16 ... 17 18 19 class B(Meta): 20 ... 21 22 23 if __name__ == '__main__': 24 print(A.origin_val, A.name, A.age) 25 A.func() 26 print(A.__dict__) 27 print(B.__dict__)
output:
只有永不遏制的奋斗 g 26
测试
{'__module__': '__main__', '__doc__': None, 'origin_val': '只有永不遏制的奋斗', 'name': 'g', 'age': 26, 'func': <function Meta.__init_subclass__.<locals>.overwrite at 0x0000026737322310>}
{'__module__': '__main__', '__doc__': None, 'origin_val': '只有永不遏制的奋斗', 'func': <function Meta.__init_subclass__.<locals>.overwrite at 0x0000026737322280>}
另外补充一句:今年的新书《python工匠...》目前浅看了三章,一个词,相见恨晚,感兴趣我觉得是可以学习学习的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!