[解決済み] dict のように動作する Python クラス
質問
のような振る舞いをするカスタムクラスを書きたい。
dict
- を継承しているので
dict
.
しかし、私の質問は、です。プライベートな
dict
メンバを
__init__()
メソッドに追加することはできますか?私はこの意味がわかりません、私はすでに
dict
を継承していれば
dict
.
なぜほとんどの継承スニペットが以下のようになるのか、どなたかご指摘いただけないでしょうか?
class CustomDictOne(dict):
def __init__(self):
self._mydict = {}
# other methods follow
よりシンプルな代わりに...
class CustomDictTwo(dict):
def __init__(self):
# initialize my other stuff here ...
# other methods follow
実は、質問の答えは、ユーザーが直接あなたの辞書にアクセスできないようにする(つまり、あなたが提供したアクセスメソッドを使用しなければならない)ことではないかと思うのですが、いかがでしょうか。
しかし、配列のアクセス演算子についてはどうでしょう
[]
? これはどのように実装するのでしょうか?今までのところ、私は
[]
演算子を上書きする方法を示す例を見たことがありません。
ですから、もし
[]
アクセス関数がカスタムクラスで提供されていない場合、継承されたベースメソッドは別の辞書で操作されるのですね。
Pythonの継承の理解度を試すために、以下のスニペットを試してみました。
class myDict(dict):
def __init__(self):
self._dict = {}
def add(self, id, val):
self._dict[id] = val
md = myDict()
md.add('id', 123)
print md[id]
以下のようなエラーが出ました。
KeyError: < 組み込み関数 id>
上記のコードのどこが問題なのでしょうか?
どうすれば、クラス
myDict
を修正すれば、このようなコードを書くことができるのでしょうか?
md = myDict()
md['id'] = 123
[編集]をクリックします。
私は机から飛び出す前に作った愚かなエラーを取り除くために、上記のコード サンプルを編集しました。それはタイプミスでした (私はエラー メッセージからそれを発見するべきだったのです)。
どのように解決するのですか?
のドキュメントを確認してください。
コンテナタイプをエミュレートする
. あなたの場合、最初のパラメータは
add
は
self
.
関連
-
[解決済み] 'DataFrame' オブジェクトに 'sort' 属性がない
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】「datetime.datetime not JSON serializable」を克服する方法とは?
-
[解決済み】Pythonに三項条件演算子はありますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
PythonでECDSAを実装する方法 知っていますか?
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] _tkinter.TclError: 表示名がなく、$DISPLAY環境変数もない。
-
[解決済み] データ型が理解できない
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】TypeError: 系列を <class 'float'> に変換することができません。
-
[解決済み] スロットの使い方__?