Hugh Bothwellは正しい方向に進んでいると思いますが、もっと簡潔に行うことができます。
class MyClass(object):
_defaults = "attr1", "attr2", "attr3"
_default_value = None
def __init__(self, **kwargs):
self.__dict__.update(dict.fromkeys(self._defaults, self._default_value))
self.__dict__.update(kwargs)
my_object = MyClass(attr3='overridden', attr4='added')
print(vars(my_object))
出力:
{'attr4': 'added', 'attr2': None, 'attr3': 'overridden', 'attr1': None}
クラス属性(実行時に変更される可能性があります)を_defaults
作成しました。(ただし、変更可能なデフォルト値_default_value
を提供するには、作成されたすべてのインスタンスで共有されないようにするための追加のコードが必要になる可能性があります。)
これを拡張して、デフォルト属性ごとに異なる(不変の)デフォルト値を定義できるようにするのは簡単です。
class MyClass(object):
_defaults = {
"attr1": None,
"attr2": 0,
"attr3": ""
}
def __init__(self, **kwargs):
self.__dict__.update(self._defaults)
self.__dict__.update(kwargs)
my_object = MyClass(attr3='overridden', attr4='added')
print(vars(my_object))
出力:
{'attr4': 'added', 'attr2': 0, 'attr3': 'overridden', 'attr1': None}