Có cách nào để làm cho trăn pickle bỏ qua "nó không phải là cùng một đối tượng" lỗi?Có cách nào để làm cho trăn trăn bỏ qua "nó không phải là cùng một đối tượng" lỗi
Tôi đang viết một thử nghiệm bằng cách sử dụng Mock để kiểm soát hạt mịn trên các kết quả mà datetime.utcnow() tạo ra. Mã tôi đang sử dụng là thời gian nhạy cảm nên bản vá của mô hình giúp dễ dàng kiểm tra.
Các thử nghiệm tương tự cần phải chọn đối tượng và gửi kết quả đến máy chủ từ xa. Với mục đích của thử nghiệm nếu một datetime tiêu chuẩn đã được chọn và nhận bởi máy chủ từ xa, mọi thứ sẽ ổn.
Đáng tiếc là các module dưa được barfing với các lỗi sau:
Can't pickle <type 'datetime.datetime'>: it's not the same object as datetime.datetime
Dưới đây là một ví dụ nhỏ để tạo lại lỗi.
from mock import patch
from datetime import datetime
import pickle
class MockDatetime(datetime):
frozendt = datetime(2011,05,31)
@classmethod
def advance(cls, **kw):
cls.frozendt = cls.frozendt + timedelta(**kw)
@classmethod
def utcnow(cls):
return cls.frozendt
@patch('datetime.datetime', MockDatetime)
def test():
pickle.dumps(datetime.utcnow())
if __name__ == '__main__':
test()
Có một số kết hợp của __reduce__
và __getstate__
phương pháp có thể đánh lừa các máy móc thiết bị dưa vào suy nghĩ MockDatetime là một datetime khi tôi dưa?