类型提示:如何表明我想要 return 实际 class 的一个实例?

Type-Hints: How can I indicate that I want to return an instance of the actual class?

当我尝试将类型提示和对象创建结合起来时 classmethod 我得到以下 NameError:

NameError: name 'Person' is not defined

如何通过类型提示表明我想要 return 我当前正在定义的 class 的实例? (参见示例)


示例:

classmethod from_dict 的定义失败,因为 Python 无法解析 class Person

class Person:

    def __init__(self, name: str):
        self.name = name

    @classmethod
    def from_dict(self, info: dict) -> Person:
        person_obj = Person(info['name'])
        return person_obj

    def speak(self, word: str) -> str:
        print(word)
        return self.name + 'said' + word

您需要使用 TypeVar

from typing import TypeVar
PersonType = TypeVar("PersonType", bound="Person")

class Person:
    @classmethod
    def from_dict(self, info: dict) -> PersonType:
        person_obj = Person(info['name'])
        return person_obj

使用字符串:

@classmethod
def from_dict(self, info: dict) -> 'Person':
    person_obj = Person(info['name'])
    return person_obj

这使得类方法的 return 类型成为 Person。这在编写相互依赖的 类 时也很有用。