問題タブ [metaclass]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python、Zope コンポーネント アーキテクチャ、アダプターの登録
スタンドアロンの python アプリケーションでは、アプリケーションのアダプターを登録してアクセスするためにzope.interface、zope.componentパッケージを使用します。メタクラスの概念を使用して、メタクラスのinitメソッド内からアダプターを登録できると考えました。これにより、アダプターの登録プロセスが「自動化」されます。たとえば、zope パッケージがクラスに追加する属性を使用するなど、このアプローチに問題はありますか? ご意見をお寄せいただきありがとうございます。
python - クラス定義の後にメタクラスを設定する方法はありますか?
クラスのメタクラスを設定するには、__metaclass__
属性を使用します。メタクラスはクラスの定義時に使用されるため、クラス定義の後に明示的に設定しても効果はありません。
これは、メタクラスを明示的に設定しようとすると起こることです。
私が考えることができる最良のアイデアは、クラス全体を再定義し、__metaclass__
何らかの方法で属性を動的に追加することです。または、クラス定義の後にメタクラスを設定するより良い方法を知っていますか?
python - unittestとmetaclass:自動test_*メソッド生成
フレームワークのテストを作成すると、次のパターンに気付き始めます。
test_feat_*
そのため、メタクラスを使用して、これらのタイプのテストクラスのメソッドをプログラムで作成したいと思います。つまり、署名付きのプライベートメソッドごとに、署名付き_test_{featname}(self, arg)
の2つのトップレベルの検出可能なメソッドとtest_{featname}_true(self)
をtest_{featname}_false(self)
作成する必要があります。
私は次のようなものを思いついた:
私は次のような出力を期待しています:
しかし、私が得たのは:
私が見逃しているいくつかの閉鎖規則があるようです。これを回避するにはどうすればよいですか?より良いアプローチはありますか?
ありがとう、
編集:修正されました。スニペットを参照してください。
python - 鼻、unittest.TestCase およびメタクラス: 自動生成された test_* メソッドが検出されない
これは、ユニットテストとメタクラスのフォローアップの質問です: 自動 test_* メソッド生成:
この (固定) unittest.TestCase レイアウトの場合:
これは、stdlib
のフレームワークを使用して機能します。期待される出力と実際の出力:
しかし、私は実際に鼻を使っているので、このトリックは合わないようです。私が得た出力は次のとおりです。
つまり、メタクラスによって生成されたメソッドは、ノーズtest_*
に登録されません。誰でもこれに光を当てることができますか?
ありがとう、
python - 定義時にクラスを自動登録する方法
クラスの定義時にクラスのインスタンスを登録したい。理想的には、以下のコードでうまくいくでしょう。
残念ながら、このコードではエラーが発生しますNameError: global name 'MyClass' is not defined
。
何が起こっているかは、#problem here
インスタンス化しようとしている行にありますMyClass
が、デコレータはまだ返されていないため、存在しません。
メタクラスなどを使用してこれを回避する方法はありますか?
python - Python : メタクラス + ラップされたメソッド + 継承 = 問題
Python で問題が発生しましたが、明確な解決策が見つかりません...
いくつかのメソッドを呼び出すときに、メソッドの実行前と実行後にいくつかのコードを実行したい。context
(他の多くのことの中で)変数を自動的に設定および消去するため。
これを実現するために、次のメタクラスを宣言しました。
これは魅力のように機能します:
しかし、 をサブクラス化するとすぐにParent
、親メソッドを次のように呼び出すと、問題が発生しますsuper
。
新しい値に設定する前にコンテキストを保存することを考えましたが、それは問題を部分的にしか解決しません...
確かに、(ちょっと待ってください、これは説明が難しいです)、親メソッドが呼び出され、ラッパーが実行されますが、それらは を受け取り*args
、**kwargs
アドレス指定されますParent.test
whileself
はChild
インスタンスであるためself
、*args
and **kwargs
(たとえば、自動検証の目的で)、例:
したがって、基本的に、この問題を解決するには、次の 2 つの解決策があります。
メソッドが呼び出されたときにラッパーが実行されるのを防ぎます
super(Child, self)
self
常に「正しい」タイプのを持っている
両方の解決策は私には不可能に思えます...誰かがこれを解決する方法について考えを持っていますか? 提案 ?
python - スプーフィング Python 演算子の優先順位
2 つのオブジェクトを比較しlhs == rhs
、両方が defineを返すとき、が返されるか、のサブクラスでない限り__eq__
、単に呼び出されることを知っています。lhs.__eq__
NotImplemented
rhs
lhs
arbitrary_object.__eq__
ただし、実装の詳細に関係なく、比較ステートメントの位置に関係なく、インスタンスが任意のオブジェクトと比較しながら、言いたいことを言う機会が与えられるクラスを実装したいと思います。少しぎこちなく聞こえるかもしれませんが、私はちょっとしたテスト指向のプロジェクトに取り組んでいtestmania.expect
ます。
__instancecheck__
私の最初のアイデアは、メタクラス マジックとを使用して、自分のクラスを他のクラスのサブクラスにすることでした__subclasscheck__
。ただし、単純な比較の場合は呼び出されません。
誰かが新しいアイデアを持っていますか?
delphi - クラス参照(メタクラス)変数からのクラスがTMyClassであるかどうかをテストします
クラス参照から作成されるオブジェクトが特定のクラスのインスタンスなのか、その子孫のインスタンスなのかを知りたいのですが。
つまり、次のようなブール式が必要です。
ただし、varは、クラス参照変数を含む式に置き換えられます。簡単そうに聞こえますが、私は完全に困惑しています。
インスタンスvar:= classRefVar.Createを作成し、テストしてから破棄することもできますが、それは大きなオーバーヘッドです。
奇妙なことに、コンパイラは私に
構文的には同等に見えるが役に立たないことに満足している
明らかに、式
classRefVarがTMyClassの子孫を参照している可能性があるため、これは適切ではありません。
答えを見たら自分を蹴るつもりです...
python - さまざまな線形代数バックエンドを提供するためのアーキテクチャ
Pythonで新しいシステムのプロトタイプを作成しています。機能はほとんど数値です。
重要な要件は、個々のユーザー実装からNumpyなどのジェネリックライブラリまで、さまざまな線形代数バックエンドを使用できることです。線形代数の実装(つまり、バックエンド)は、インターフェイスから独立している必要があります。
私の最初のアーキテクチャの試みは次のとおりです。
(1)システムインターフェースを定義する
(2)バックエンドとは独立してそのインターフェースを使用できるようにするコードを実装します
この簡単な例は次のように機能します。Vector
クラスは、バックエンド(numpy.ndarray
例では)によって作成されたベクターインスタンスへの参照を保持します。すべての算術呼び出しはインターフェースによって実装されますが、それらの評価はバックエンドに延期されます。
実際には、インターフェイスはすべての適切な演算子をオーバーロードし、バックエンドに依存します(例では__mul__
とのみが表示__rmul__
されますが、すべての操作で同じことが行われることを確認できます)。
カスタマイズ性と引き換えに、パフォーマンスをいくらか失うことをいとわない。私の例は機能しますが、それは正しく感じられません-非常に多くのコンストラクター呼び出しでバックエンドを壊してしまいます!これは別のmetaclass
実装を要求し、より良い呼び出し延期を可能にします。
では、この機能を実装することをどのように推奨しますか?Vector
システムのすべてのインスタンスを均一に保ち、線形代数のバックエンドから独立させることの重要性を強調する必要があります。
python - django のようなフォームの実装でメタクラスを使用する利点は何ですか?
最初に少し背景を説明します... Django でのフォームの実装を理解するために (そして途中でいくつかの Python を学ぶために)、フォームの Django ソース コードを調べていました。Django は DeclaredMetaFields MetaClassを使用してフォームを実装します。
これは、Django のようなフォーム実装の非常に大雑把なクラス図です ( gist のサンプル コードへのリンク)。
そして、これがインスタンス図です。
これは、メタクラスに頼らない非常に大まかな同じクラスの実装です ( gist のサンプル コードへのリンク)。
メタクラスの概念などを理解し、Django コードがどのように機能するかを理解しています。それでは質問です。
- 構文のエレガンスなどの明白な利点以外に、メタクラスの実装に他の利点はありますか?
- BoundField のような中間オブジェクトに頼ることなく、メタクラスのような実装は可能ですか?