Python 3.12 新 decorator — override
Posted on Oct 17, 2023 in Python 程式設計 - 中階 by Amo Chen ‐ 1 min read
Python 3.12 typing 模組推出 1 個新的 @override
decorator 。
本文將介紹其用途與教學。
本文環境
- Python 3.12
@override
Python 3.12 typing 模組推出 1 個新的 @override
decorator, 用來檢查繼承時子類別 override 有沒有問題,用法蠻簡單的,直接看下列範例:
from typing import override
class A(object):
def very_long_function_name(self) -> None:
pass
class B(A):
@override
def very_long_func_name(self) -> None:
pass
上面的範例 B 類別試圖覆寫 A 類別的 very_long_function_name
, 但是它打錯名字,所以會造成呼叫 B.very_long_function_name()
時沒有任何錯誤發生,因為實際上是呼叫到 A.very_long_function_name()
, 如果這個方法可能是某個實驗的微調數字,你也剛好沒檢查到這個錯誤,就會 GG 思咪達⋯⋯。
所幸 @override
這個 decorator 會讓 type checker 幫你檢查 very_long_func_name
是否在父類別有對應的方法存在,如果沒有的話, type checker 會出現錯誤 error: Method "very_long_func_name" is marked as an override, but no base method was found with this name [misc]
, 如此一來,你就有機會在悲劇發生前拯救自己。
謝謝你, @override
我的超人!
References
PEP 698: Override Decorator for Static Typing