当我尝试组合类型提示和对象创建时
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
答案 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。在编写彼此依赖的类时,这也很有用。