控制子類的的創建
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工匠...》目前淺看了三章,一個詞,相見恨晚,感興趣我覺得是可以學習學習的
只有永不遏止的奮斗,才能使青春之花,即便是凋謝,也是壯麗地凋謝轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534104.html
標籤:Python
