我使用JSON创建了Python数据类(实际上有很多)。我想要一个从JSON创建类实例的方法
我有这样的想法:
class FromJSONMixin:
@staticmethod
@abstractmethod
def from_json(json: Union[Dict, TypedDict], **kwargs):
raise NotImplementedError
class PatientJSON(TypedDict):
ID: str
Name: str
Description: str
BirthDate: str
@dataclass
class Patient(FromJSONMixin):
name: str
birth_date: str
description: str
@staticmethod
def from_json(json: PatientJSON, **kwargs) -> Patient:
return Patient(
name=json["Name"],
birth_date=json["BirthDate"],
description=raw_data["Description"])
我想从PatientJSON
创建Patient
对象(该结构与现有数据库相关,我必须与之集成;它还进行一些名称属性转换,如上面所示)。我创建了FromJSONMixin
来显式标记可以从JSON的相关类创建的类(如PatientJSON
)
问题:我发现-> Patient:
部分Unresolved reference 'Patient'
有一个错误。为什么?我不能在同一个类的方法中键入类对象?我必须放弃键入返回类型吗
这是创建具有良好类型注释的模块时的常见问题。问题在于python解释器在解析用于创建类Patient的代码时。方法
Patient.from_json
的返回类型注释引用了类Patient,该类位于解析的中间,尚未创建。为了解决这个问题,通常在返回注释中用引号将类名括起来,使其成为字符串。但是现在MyPy和其他类型检查程序出现了问题。它们不允许字符串返回注释,因此有一个很好的解决方案:这将引发未解决的引用错误
要解决此问题,可以用引号括住方法return注释
这将有助于可读性,但不适用于MyPy之类的类型检查器。 因此,对于像MyPy这样的checker,您可以创建一个TypeVar
相关问题 更多 >
编程相关推荐