我正在尝试添加具有from_dict
和to_dict
方法的基类。这是我到目前为止的内容:
class Base:
def __init__(self, **kwargs):
for k,v in kwargs.items():
setattr(self, k, v)
@classmethod
def from_dict(cls, d):
return Base(**d)
def to_dict(self):
d = dict()
for k,v in self.__dict__.items():
if k.startswith('_'): continue # remove fields that start with '_'
d[k] = v
return d
class Item(Base):
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
self._nombre = kwargs.get('_nombre')
self.other = 'hello!'
super().__init__(**self.__dict__)
以下是其用法的一些示例:
>>> Item().to_dict()
{'name': None, 'age': None, 'other': 'hello!'}
>>> Item.from_dict({'age':12}).to_dict()
{'age': 12} # I want this to also have `name` and `other` keys.
请注意,当我使用from_dict
时,它没有填写子类的默认值。将方法添加到Item
时有效:
class Item(Base):
def __init__(self, **kwargs):
self.name = kwargs.get('name')
self.age = kwargs.get('age')
self._nombre = kwargs.get('_nombre')
self.other = 'hello!'
super().__init__(**self.__dict__)
@classmethod
def from_dict(cls, d):
return Item(**d)
但是我如何让它生活在父Base
类中?如果不可能,那么最“ Python式”的方法是什么(一个Mixin?)?
答案 0 :(得分:0)
您将to_dict()用作类方法,但事实并非如此。将其设置为类方法,或调用Item构造函数以获取实例并调用其方法。