類型提示:解決循環依賴
在Python 中,當兩個類別在類型提示中相互引用時,可能會出現循環依賴。這會在嘗試實例化其中一個類別時導致 NameError。
請考慮以下範例:
<code class="python">class Server: def register_client(self, client: Client) pass class Client: def __init__(self, server: Server): server.register_client(self)</code>
嘗試實例化 Client 將會失敗,並出現 NameError: name 'Client' is not定義。
使用前向引用
解決此循環依賴關係的一種方法是在類型提示中使用前向引用。這是透過為尚未定義的類別提供字串名稱來完成的:
<code class="python">class Server: def register_client(self, client: 'Client') pass</code>
推遲註解解析
Python 3.7 中引入的另一個解決方案是完全推遲註解的運行時解析。這是透過在模組頂部添加以下導入來實現的:
<code class="python">from __future__ import annotations</code>
隨著註解解析的推遲,註解將儲存為表達式的抽象語法樹 (AST) 的字串表示形式。您可以使用 Typing.get_type_hints() 來解析這些註解並解析上例中使用的前向參考。
有關更多詳細信息,請參閱 PEP 563:推遲對註釋的評估。
以上是如何解決Python類型提示中的循環依賴?的詳細內容。更多資訊請關注PHP中文網其他相關文章!