Bạn không thể yêu cầu trình chọn lớp mặc định bỏ qua thứ gì đó, không.
jsonpickle
không hỗ trợ pickle
module__getstate__
và __setstate__
phương pháp. Nếu các lớp của bạn thực hiện hai phương thức đó, thì bất kỳ thứ gì được trả lại sau đó được sử dụng bởi jsonpickle
để đại diện cho trạng thái thay thế. Cả hai phương pháp đều cần phải được thực hiện.
Nếu __getstate__
là không thực hiện, jsonpickle
sử dụng thuộc tính __dict__
thay thế, do phiên bản của riêng bạn chỉ cần sử dụng từ điển cùng, loại bỏ phím _sa_instance_state
và bạn đang thực hiện:
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
Dù __getstate__
lợi nhuận sẽ được xử lý thêm, đệ quy, không cần phải lo lắng về việc xử lý các subobject ở đó.
Nếu thêm __getstate__
và __setstate__
không phải là tùy chọn, bạn cũng có thể đăng ký custom serialization handler cho lớp học của mình; bất lợi là trong khi __getstate__
có thể lấy đi chỉ bằng cách trả về một từ điển, một trình xử lý tùy chỉnh sẽ cần phải trả về một giá trị được làm phẳng hoàn toàn.
Nguồn
2013-08-09 13:30:28
Thêm '__getstate__' và' __setstate__' hoạt động như một sự quyến rũ hiện tại, cảm ơn bạn. Thay vì viết cùng một dòng mã cho mỗi mô hình, việc triển khai một trình trang trí để xóa các trường bị bỏ qua khỏi '__dict__' có thể là một ý tưởng hay cho tương lai. – mkubilayk
Thứ hai, thứ mà mkubilayk mong muốn cho một tính năng trong tương lai, nó sẽ rất giống với xml serialization của Xml [XmlAttributes.XmlIgnore Property] (https://msdn.microsoft.com/en-us/library/system.xml.serialization .xmlattributes.xmlignore (v = vs.110) .aspx) – jxramos