Скажем, мы хотим сериализовать B
ниже:
import json
class A:
def __init__(self):
self.a = 1
@classmethod
def serialize(cls, t):
with open('temp_A.json', 'wb') as f:
json.dump({'a':t.a}, f)
@classmethod
def deserialize(cls):
with open('temp_A.json', 'rb') as f:
d = json.load(f)
obj = A()
obj.a = d['a']
return obj
class B(A):
def __init__(self):
super(B, self).__init__()
self.b = 2
@classmethod
def serialize(cls, t):
with open('temp_B.json', 'wb') as f:
json.dump({'b':t.b}, f)
@classmethod
def deserialize(cls):
with open('temp_B.json', 'rb') as f:
d = json.load(f)
obj = B()
obj.b = d['b']
a = A.deserialize()
#### IMPORTANT: doesn't work
super(B, b) = a
####
return b
Если этот шаблон сериализации ужасен и у вас есть альтернативы, пожалуйста, дайте мне знать. Однако на текущем этапе я не уверен, как переназначить переменные-члены суперкласса как атрибуты a
(так как состояние a
может отличаться от исходного построения). Я знаю, что могу сделать что-то вроде super(B,b).__dict__ = a.__dict__
, но это нехорошо. Что такое Python-идиоматический способ выполнения чего-то подобного?