Skip to main content

常にいまいち

(Python)classmethodの返り値の型として自身の型を使う

検証環境

python version: 3.8.2

説明

class MyType:
    @classmethod
    def from_name(cls, name: str) -> MyType:
        t = cls()
        t.__name = name
        return t

のようなコードを書くと、python3.8.2では -> MyType の部分がUnresolved referenceになってしまう。 これを回避するには以下のようにする。

from __future__ import annotations # この行を追加する

class MyType:
    @classmethod
    def from_name(cls, name: str) -> MyType:
        t = cls()
        t.__name = name
        return t

python 3.7からfuture behaviorとして追加されているので、それ以降ならこれだけで解決可能。

参考