當前位置:
首頁 >
Python的元类
發布時間:2025/6/17
34
豆豆
1、用元類驗證子類
每當我們定義新類的時候,元類就會運行雅正代碼,以確保這個新類符合規定的規范。
Python系統把子類的class語句處理完畢,就會調用元類的 __new__ 方法。元類可以通過 __new__ 方法,獲取子類、孫子類的名稱,父親及屬性。
這樣使得我們不需要將驗證代碼放在本類 __init__ 方法中,等到構建對象再驗證。
下例中,定義一個邊數小于3的子類,class語句一結束,元類的驗證代碼就會拒絕這個class。
class ValidatePolygon(type):def __new__(meta, name, bases, class_dict):# Don't validate the abstract Polygon classif bases != (object,):if class_dict['sides'] < 3:raise ValueError('Polygons need 3+ sides')return type.__new__(meta, name, bases, class_dict)class Polygon(object, metaclass=ValidatePolygon):sides = None # Specified by subclasses@classmethoddef interior_angles(cls):return (cls.sides - 2) * 180class Triangle(Polygon):sides = 3print(Triangle.interior_angles())2、用元類注冊子類
每次從基類中繼承子類時,基類的元類都可以自動運行注冊代碼。
這在需要反向查找 ‘reverse lookup’ 時很有用,使得在簡單標識符和對應的類之間,建立映射關系。
依然利用的是class語句執行完,自動調用元類的 __new__ 方法。
3、用元類注解類的屬性
使用元類像是在 class 語句上放置了掛鉤,class語句處理完畢,掛鉤就會立刻觸發。
下列中借助元類設置了 Filed.name 和 Filed.name。
元類總結就到這里,自己也沒有完全理解清楚。
希望對此有深刻理解的pythoner留言。
代碼來自:https://github.com/bslatkin/effectivepython
轉載于:https://www.cnblogs.com/lidyan/p/7157227.html
總結
- 上一篇: Git基础命令(一)
- 下一篇: Python: generator, y