defaultlist
とのアナロジーで、を作成しようとしていますdefaultdict
。アイデアは、値が明示的に設定されていないすべてのインデックスにいくつかの要素が事前に入力された(事実上!)リストが必要な場合があるということです。との違いdefaultdict
は、ユーザーの割り当てのためにリストを拡張する必要がない限り、実際にはデフォルト値をリストに追加しないことです。
1)このデザインに問題はありますか?
2)これは私が使用する実装です。何か問題はありますか?
class defaultlist(list):
def __init__(self, default_factory, arg = ()):
# note: cannot use arg = None since list(None) is not the same as list()
# alternatively can use:
# def __init__(self, default_factory, *args, **kwargs)
self.default_factory = default_factory
super().__init__(arg)
def __getitem__(self, key):
try:
return super().__getitem__(key)
except IndexError:
return self.default_factory()
def __setitem__(self, key, value):
for i in range(len(self), key):
self.append(self.default_factory())
self.append(value)
編集:元々、私は2つの間違いを犯しました。申し訳ありませんが、回答の両方のエラーを指摘していただきありがとうございます。