phương pháp sơ thẩm có thể không tự động được ngâm trong cả hai Python 2 hoặc Python 3.Đây có phải là cách đúng để chọn các phương pháp mẫu không? Nếu có, tại sao không phải là nó trong Python 3?
tôi cần phải dưa phương pháp dụ với Python 3 và tôi chuyển mã ví dụ của Steven Bethard để Python 3:
import copyreg
import types
def _pickle_method(method):
func_name = method.__func__.__name__
obj = method.__self__
cls = method.__self__.__class__
return _unpickle_method, (func_name, obj, cls)
def _unpickle_method(func_name, obj, cls):
for cls in cls.mro():
try:
func = cls.__dict__[func_name]
except KeyError:
pass
else:
break
return func.__get__(obj, cls)
copyreg.pickle(types.MethodType, _pickle_method, _unpickle_method)
Đây có phải là phương pháp đánh lừa bằng chứng cho phương pháp tẩy dụ? Hoặc có thể một số điều sai lầm khủng khiếp? Tôi đã thử nghiệm nó với một số giả lập các lớp học và tất cả mọi thứ dường như làm việc.
Nếu không có gì có thể xảy ra sai, tại sao không thể thực hiện được trong Python 3 cho các phương pháp lấy mẫu tiêu chuẩn?
Bởi vì tất cả tài liệu tham khảo phải được truy cập trên toàn cầu. http://www.velocityreviews.com/forums/t395502-why-cant-you-pickle-instancemethods.html –
@Lennart Nếu bạn nhìn vào liên kết, bạn sẽ thấy rằng tôi đã tìm thấy chính chuỗi đó. Tuy nhiên nó không giải thích rõ sự khác biệt thực sự giữa việc chọn phương thức và hàm. Tôi biết rằng cũng có một số chức năng, giống như một hàm lambda không thể được ngâm, nhưng trong trường hợp đó một lỗi được ném ra khi nó là không thể. Tại sao không giống nhau cho các phương pháp? –