python 自作クラスのフィールドの型ヒントに同一の型を指定する

Pythonでクラスを自作し、フィールドに型ヒントを設定したい場合があったのですが、少しハマったのでメモ。

Crawlerというクラスを実装し、そのフィールドsub_crawlerにはset[Crawler]を指定したかったが、これでは
NameError: name 'Crawler' is not definedというエラーを吐かれてしまいます。

class Crawler:
    link: str
    session: HTMLSession = HTMLSession()
    sub_crawlers: set[Crawler]    <- これだとNameErrorが吐かれる
    
    def __init__(self, input_link: str):
        r = self.session.get(input_link)
        r.html.render()
        
...

解決方法

型ヒント中の自作クラスの名前をクォーテーションで囲めばOK

class Crawler:
    link: str
    session: HTMLSession = HTMLSession()
    sub_crawlers: set['Crawler']    <- これでOK
    
    def __init__(self, input_link: str):
        r = self.session.get(input_link)
        r.html.render()
        
...

参考

https://stackoverflow.com/questions/41135033/type-hinting-within-a-class

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


This site uses Akismet to reduce spam. Learn how your comment data is processed.