[解決済み】__getattr__と__getattribute__の違いについて理解する。
質問
との違いを理解しようとしています。
__getattr__
と
__getattribute__
しかし、私はそれで失敗しています。
は、その
答え
Stack Overflow の質問に対する
の違い
__getattr__
対
__getattribute__
は言う。
__getattribute__
は、実際の属性を見る前に呼び出されます。 オブジェクトを作成するのは難しいです。 を正しく実装する必要があります。正しく実装すると 無限ループに陥りやすい。
全く意味がわかりません。
そして、こう続きます。
ほぼ間違いなく
__getattr__
.
なぜ?
を読んだのですが、もし
__getattribute__
が失敗します。
__getattr__
が呼び出されます。では、なぜ同じことをするのに2つの異なるメソッドがあるのでしょうか?私のコードが新しいスタイル・クラスを実装している場合、何を使うべきでしょうか?
この疑問をクリアにするために、コード例を探しています。できる限りググってみましたが、見つかった回答は、この問題を十分に議論していません。
ドキュメントがあれば、それを読む準備はできています。
どのように解決するのですか?
まずは基本的なことを。
オブジェクトでは、その属性を扱う必要があります。通常、私たちは
instance.attribute
. もっと制御が必要な場合もあります(事前に属性名がわからない場合)。
例えば
instance.attribute
は次のようになります。
getattr(instance, attribute_name)
. このモデルを使って、属性を取得するために
属性名
を文字列で指定します。
使用方法
__getattr__
また、クラスが明示的に管理していない属性をどのように扱うかを指定し、それを
__getattr__
メソッドを使用します。
Pythonは、まだ定義されていない属性を要求するたびに、このメソッドを呼び出します。
古典的な使用例です。
class A(dict):
def __getattr__(self, name):
return self[name]
a = A()
# Now a.somekey will give a['somekey']
の注意点・使い方
__getattribute__
すべての属性をキャッチする必要がある場合
存在するか否かにかかわらず
を使用します。
__getattribute__
の代わりに その違いは
__getattr__
は、実際には存在しない属性に対してのみ呼び出されます。 もし属性を直接設定したなら、その属性を参照すれば
__getattr__
.
__getattribute__
がずっと呼ばれている。
関連
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] インターフェースと抽象クラスの違いは何ですか?
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] 私的相続、公的相続、保護相続の違いについて
-
[解決済み] __getattr__ と __getattribute__ の違い
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
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入門 openを使ったファイルの読み書きの方法
-
[解決済み】「SyntaxError.Syntax」は何ですか?Missing parentheses in call to 'print'」はPythonでどういう意味ですか?
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python Error: "ValueError: need more than 1 value to unpack" (バリューエラー:解凍に1つ以上の値が必要です
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ImportError: bs4という名前のモジュールがない(BeautifulSoup)
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] __getattr__ と __getattribute__ の違い