タグ付けされた質問 「getattr」

6
__getattr__と__getattribute__の違い
__getattr__またはを使用するタイミングを理解しようとしています__getattribute__。ドキュメントには言及し__getattribute__新しいスタイルのクラスに適用されます。新しいスタイルのクラスとは何ですか?

14
正確にgetattr()とは何ですか?どのように使用しますか?
私は最近関数について読みましたgetattr()。問題は、その使い方のアイデアがまだ理解できないことです。私が理解してgetattr()いる唯一のことgetattr(li, "pop")は、を呼び出すことと同じli.popです。 この本で、実行時まで関数の名前を知らずに関数への参照を取得する方法が本で言及されているときは、理解できませんでした。多分これは私がプログラミングの初心者なのかもしれません。誰かがこの問題に光を当てることができますか?これをいつ、どのように正確に使用しますか?
295 python  getattr 

4
__getattr__と__getattribute__の違いを理解する
私は違いを理解しようとしています__getattr__と__getattribute__、しかし、私はそれで失敗しています。 答えはスタックオーバーフローの質問に違い__getattr__Vsは__getattribute__言います: __getattribute__オブジェクトの実際の属性を確認する前に呼び出されるため、正しく実装するのが難しい場合があります。あなたは非常に簡単に無限の再帰に終わることができます。 それが何を意味するのか全く分かりません。 次にそれは言う: あなたはほぼ間違いなく欲しい__getattr__。 どうして? 私があればことを読んで__getattribute__失敗した、__getattr__と呼ばれています。では、なぜ同じことをする2つの異なる方法があるのでしょうか。コードが新しいスタイルクラスを実装する場合、何を使用すればよいですか? この質問をクリアするためのコード例を探しています。私は自分の能力を最大限に活用しましたが、私が見つけた答えは問題を完全に議論していません。 ドキュメントがある場合は、それを読む準備ができています。


4
現在のモジュールでsetattr()を呼び出すにはどうすればよいですか?
現在のモジュールに変数を設定するには、最初のパラメーター " object" として関数setattr(object, name, value)に何を渡しますか? 例えば: setattr(object, "SOME_CONSTANT", 42); 同じ効果を与える: SOME_CONSTANT = 42 これらの行を含むモジュール内(正しいobject)。 モジュールレベルでいくつかの値を動的に生成しています。モジュールレベルでは定義できないため__getattr__、これがフォールバックです。

8
モジュールに対する__getattr__
__getattr__クラスに、モジュールに同等のものをどのように実装できますか? 例 モジュールの静的に定義された属性に存在しない関数を呼び出すとき、そのモジュールでクラスのインスタンスを作成し、モジュールの属性ルックアップで失敗したのと同じ名前でそのメソッドを呼び出します。 class A(object): def salutation(self, accusative): print "hello", accusative # note this function is intentionally on the module, and not the class above def __getattr__(mod, name): return getattr(A(), name) if __name__ == "__main__": # i hope here to have my __getattr__ function above invoked, since # salutation does …

6
無限再帰エラーなしで__getattribute__を実装するにはどうすればよいですか?
クラス内の1つの変数へのアクセスをオーバーライドしたいが、他のすべての変数は通常どおりに戻したい。どうすればこれを達成でき__getattribute__ますか? 私は次のことを試しました(これも私がやろうとしていることを示しています)が、再帰エラーが発生します。 class D(object): def __init__(self): self.test=20 self.test2=21 def __getattribute__(self,name): if name=='test': return 0. else: return self.__dict__[name] >>> print D().test 0.0 >>> print D().test2 ... RuntimeError: maximum recursion depth exceeded in cmp
100 python  class  oop  recursion  getattr 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.