Me gustaría seleccionar un método independiente en Python 3.x. Obtengo este error:Decapado de un método independiente en Python 3
>>> class A:
... def m(self):
... pass
>>> import pickle
>>> pickle.dumps(A.m)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
pickle.dumps(A.m)
File "C:\Python31\lib\pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed
¿Alguien tiene experiencia con esto?
Nota: En Python 2.x también es imposible eliminar los métodos de unión por defecto; Me las arreglé para hacerlo allí de una manera extraña que no entiendo: escribí un reductor con el módulo copy_reg
para la clase MethodType, que abarca los métodos vinculados y no vinculados. Pero el reductor solo resolvió el caso del método vinculado, porque dependía de my_method.im_self
. Misteriosamente, también ha provocado que Python 2.x pueda extraer métodos independientes. Esto no ocurre en Python 3.x.
¿Está diciendo que en Python 3, dado un método independiente, no hay forma de saber dónde se definió ese método? –
Sí. Intente declarar dos clases y asigne un método de uno a otro ('B.m = A.m'). Entonces 'B.m' y' A.m' serán iguales (de hecho, idénticos), por lo que no es posible determinar si buscó el método en 'B' o en' A'. – doublep