控制子类的的创建
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': }
{'__module__': '__main__', '__doc__': None, 'origin_val': '只有永不遏制的奋斗', 'func': }
另外补充一句:今年的新书《python工匠...》目前浅看了三章,一个词,相见恨晚,感兴趣我觉得是可以学习学习的
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |