类型提示:如何表明我想要 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。这在编写相互依赖的 类 时也很有用。
当我尝试将类型提示和对象创建结合起来时
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。这在编写相互依赖的 类 时也很有用。