类型提示:如何指示我想返回实际类的实例?

时间:2016-11-02 09:39:04

标签: python python-3.5 typing type-hinting

当我尝试组合类型提示和对象创建时 classmethod我得到以下NameError

NameError: name 'Person' is not defined

如何通过类型提示表明我想要返回一个 我目前正在定义的类的实例? (见例)

示例:

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

2 个答案:

答案 0 :(得分:2)

您需要使用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

答案 1 :(得分:0)

使用字符串:

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

这使得classmethod的返回类型成为Person。在编写彼此依赖的类时,这也很有用。