一、__reduce__()介紹
當定義擴展類型時(也就是使用Python的C語言API實現的類型),如果你想pickle它們,你必須告訴Python如何pickle它們。 __reduce__ 被定義之后,當對象被Pickle時就會被調用。它要么返回一個代表全局名稱的字符串,Pyhton會查找它並pickle,要么返回一個元組。這個元組包含2到5個元素,其中包括:一個可調用的對象,用於重建對象時調用;一個參數元素,供那個可調用對象使用;被傳遞給 __setstate__ 的狀態(可選);一個產生被pickle的列表元素的迭代器(可選);一個產生被pickle的字典元素的迭代器(可選)
二、使用案例
class ServerError(UserWarning): # UserWarning用戶代碼生成的警告 def error(self): # C語言接口,可將錯誤信息pickle成字符串 return self.__reduce__()[1] #返回的是(<class '__main__.ServerError'>, ('錯誤信息',)),所以切片取1 def instance_name(name): try: if not isinstance(name,str): raise ServerError("名字必須是字符串") except ServerError as e: error=e.error()[0] print(error) instance_name(123) #作用是:可以將自定義的錯誤信息,組成json格式返回給前端