对于类实例或函数(以及方法)的腌制,Python的腌菜依赖于其名称可以用作全局变量-字典中对方法的引用指向全局名称空间中不可用的名称-
更好说“模块名称空间”-
您可以通过自定义类的酸洗,创建“ setstate”和“ getstate”方法来规避这一问题-
但我认为您会更好,因为格式化功能不依赖于对象或类本身的任何信息(并且即使有某种格式化功能,也可以将其作为参数传递),并在类范围之外定义一个功能。
这确实有效(Python 3.2):
def default_float_format( x): return '{:.2%}'.format(x)class A: def __init__(self, params): # ... # by default printing all float values as percentages with 2 decimals self.format_functions = {float: default_float_format} def __str__(self): # uses self.format_functions to format output passa = A(1)pickle.dumps(a)


