查看生成的数据类代码,包括重新组合字节码、格式化静态模板和大量的魔术。
DataclassInspector的Python项目详细描述
查看生成的数据类代码,包括重新组合字节码、格式化静态模板和大量的魔术。
检查员
Inspector是用于检查数据类的类。你可以用数据类初始化它。
>>>fromDataclassInspector.inspectorimportInspector>>>@dataclass...classItem:...name:str...value:int=34...>>>inspected=Inspector(Item)
然后打开一个文件并将inspected.code写入其中(示例输出如下)。
fromdataclassesimportField,_MISSING_TYPE,_DataclassParamsclassItem:__dataclass_fields__={"name":"Field(name='name', type=str, default=_MISSING_TYPE, default_factory=_MISSING_TYPE, init=True, repr=True, hash=None, compare=True, metadata={}, _field_type=_FIELD)","value":"Field(name='value', type=int, default=34, default_factory=_MISSING_TYPE, init=True, repr=True, hash=None, compare=True, metadata={}, _field_type=_FIELD)",}__dataclass_params__=_DataclassParams(init=True,repr=True,eq=True,order=False,unsafe_hash=False,frozen=False,)name:strvalue:int=34def__eq__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)==(other.name,other.value)else:returnNotImplemented__hash__=Nonedef__init__(self,name:str,value:int=34)->None:self.name=nameself.value=valuedef__repr__(self):return(self.__class__.__qualname__+f"""(name={(self.name)!r}, value={(self.value)!r})""")
它还提供自动生成其他自定义函数;
>>>@dataclass(order=True)...classNewItem(Item):...name:int...value:str...defconvert(self):...self.name=str(name)...>>>inspected=Inspector(NewItem)
输出为;
fromdataclassesimportField,_MISSING_TYPE,_DataclassParamsclassNewItem(Item):__dataclass_fields__={"name":"Field(name='name', type=int, default=_MISSING_TYPE, default_factory=_MISSING_TYPE, init=True, repr=True, hash=None, compare=True, metadata={}, _field_type=_FIELD)","value":"Field(name='value', type=str, default=34, default_factory=_MISSING_TYPE, init=True, repr=True, hash=None, compare=True, metadata={}, _field_type=_FIELD)",}__dataclass_params__=_DataclassParams(init=True,repr=True,eq=True,order=True,unsafe_hash=False,frozen=False,)name:intvalue:strdef__eq__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)==(other.name,other.value)else:returnNotImplementeddef__ge__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)>=(other.name,other.value)else:returnNotImplementeddef__gt__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)>(other.name,other.value)else:returnNotImplemented__hash__=Nonedef__init__(self,name:int,value:str=34)->None:self.name=nameself.value=valuedef__le__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)<=(other.name,other.value)else:returnNotImplementeddef__lt__(self,other):ifother.__class__isself.__class__:return(self.name,self.value)<(other.name,other.value)else:returnNotImplementeddef__repr__(self):return(self.__class__.__qualname__+f"""(name={(self.name)!r}, value={(self.value)!r})""")defconvert(self):self.name=str(name)