問題タブ [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 - メタクラスを使用してメソッドを追加する方法
メタクラスを使用してクラスにインスタンス メソッドを追加するにはどうすればよいですか (はい、メタクラスを使用する必要があります)。次のような動作をしますが、func_name は "foo" のままです:
私の問題は、一部のライブラリ コードが実際に func_name を使用し、後で Foo インスタンスの 'bar' メソッドを見つけられないことです。私はそれをできた:
types.MethodType もありますが、それを使用するにはまだ存在しないインスタンスが必要です。ここで何か不足していますか?
python - あるメソッドのドキュメント文字列を使用して、別のメソッドのドキュメント文字列を自動的に上書きする
execute
問題:別のメソッドを呼び出すテンプレート メソッドを含むクラスがあります_execute
。サブクラスは_execute
、特定の機能を実装するために上書きすることになっています。この機能は、 の docstring で文書化する必要があります_execute
。上級ユーザーは、独自のサブクラスを作成してライブラリを拡張できます。ただし、そのようなサブクラスを扱う別のユーザーは のみを使用する必要があるexecute
ため、 を使用しても正しい docstring が表示されませんhelp(execute)
。
execute
したがって、サブクラスで の docstring が の docstring に自動的に置き換えられるように、基本クラスを変更するとよいでしょう_execute
。これを行う方法はありますか?
これをユーザーに完全に透過的にするために、これを行うためのメタクラスを考えていました。
python - Python のメタクラスとは何ですか?
Python では、メタクラスとは何ですか? また、それらを何に使用しますか?
python - GAE で HTTP リクエスト動詞をオーバーライドする方法
Google App Engine Webapp フレームワーク アプリケーションのコンテキストでは:
パラメータ _method が指定されている場合に、リクエストのリクエスト動詞を変更したい。たとえば、POST リクエストがパラメータ _method=PUT で受信された場合、ハンドラーの put メソッドを呼び出すようにリクエストを変更する必要があります。これは、prototype.js が PUT や DELETE (IE の回避策) などの動詞を処理する方法に対処するためです。これが私の最初の試みです:
問題は、何らかの理由で、リダイレクトが行われるたびに、初期化が呼び出されたときに設定されていても、処理メソッド (put または delete) が呼び出されるまでに self.request.params が空になることです。これがなぜなのか、誰にも手がかりがありますか?回避策として、initialize() 時に params を複製できると考えましたが、.copy() は機能せず、その方法も見つかりませんでした。
更新: Arachnid から非常に役立つ回答を受け取りました。私がたどり着いた解決策は、メタクラスを使用しています。以下にあります。
python - メタクラスのいくつかの(具体的な)ユースケースは何ですか?
私にはメタクラスを使用するのが好きな友人がいて、定期的にそれらを解決策として提供しています。
メタクラスを使用する必要はほとんどないことを私は心に留めています。なんで?クラスに対してそのようなことをしているのなら、おそらくオブジェクトに対してそれをしているはずだと私は思います。そして、小さな再設計/リファクタリングが必要です。
メタクラスを使用できるようになったため、多くの場所で多くの人々がクラスをある種の二流のオブジェクトとして使用するようになりました。これは私には悲惨なことのように思えます。プログラミングはメタプログラミングに置き換えられますか?残念ながら、クラスデコレータの追加により、さらに受け入れやすくなりました。
ですから、Pythonでのメタクラスの有効な(具体的な)ユースケースを知りたいと思います。または、場合によっては、クラスの変更がオブジェクトの変更よりも優れている理由について理解する必要があります。
始めます:
サードパーティのライブラリを使用する場合、特定の方法でクラスを変更できると便利な場合があります。
(これは私が考えることができる唯一のケースであり、具体的ではありません)
python - 「MetaClass」、「__ new __」、「cls」、「super」-メカニズムは正確には何ですか?
私はこれらのような投稿を読みました:
しかし、どういうわけか私は混乱しました。次のような多くの混乱:
いつ、なぜ私は次のようなことをしなければならないのですか?
また
また
スーパーはどのように正確に機能しますか?
link1のクラスレジストリとアンレジストリとは何ですか?それはどのように正確に機能しますか?(私はそれがシングルトンと関係があると思いました。私は間違っているかもしれません、Cのバックグラウンドからです。私のコーディングスタイルはまだ機能とOOの混合です)。
クラスのインスタンス化(サブクラス、メタクラス、スーパー、タイプ)とメソッド呼び出し(
)適切にコメントされた作業コードを使用します(最初のリンクは非常に近いですが、clsキーワードとsuper(..)およびレジストリについては説明していません)。できれば多重継承の例。
PS:Stack Overflowのフォーマットでテキストmetaclass->__new__
がメタクラスに変換されていたため、最後の部分をコードとして作成しました-> new
python - Python/他の言語でmeta-meta-classes/meta-meta-meta-classesを使用している人はいますか?
最近、Pythonでメタクラスを発見しました。
基本的に、Pythonのメタクラスは、クラスを作成するクラスです。これを実行する理由はたくさんあります。たとえば、あらゆる種類のクラスの初期化です。工場でのクラスの登録、属性の複雑な検証、継承の仕組みの変更など。これらすべてが可能になるだけでなく、簡単になります。
しかし、Pythonでは、メタクラスもプレーンクラスです。それで、私は抽象化が有用にもっと高くなることができるかどうか疑問に思い始めました、そしてそれが可能であるように私には思えます:
- メタクラスは、パターン内の役割に対応するか、その役割を実装します(GOFパターン言語の場合と同様)。
- メタメタクラスはパターン自体です(単一のクラスではなく、抽象的な役割を表すクラスのタプルを作成できる場合)
- meta-meta-metaclassはパターンファクトリであり、GOFパターングループ(作成、構造、動作など)に対応します。特定のタイプの問題のケースを記述でき、それを解決する一連のクラスを提供するファクトリ。
- meta-meta-meta-metaclass(私が知る限り)は、パターンファクトリファクトリです。これは、問題のタイプを説明できるファクトリであり、パターンファクトリに問い合わせることができます。
私はこれについてオンラインでいくつかのことを見つけましたが、ほとんどの場合あまり役に立ちません。1つの問題は、言語が異なればメタクラスの定義もわずかに異なることです。
他の誰かがpython/elsewhereでこのようなメタクラスを使用したり、これが実際に使用されているのを見たり、考えたりしたことがありますか?他の言語の類似物は何ですか?たとえば、C ++では、テンプレートの再帰はどのくらい深くなることができますか?
さらに調べてみたいと思います。
interface - Groovy: インターフェイスのメタクラスを委譲しますか?
Groovy のパッケージ名規則を使用して、次のように Java メソッドへの Groovy メソッド呼び出しをインターセプトできます。
クラス Foo のオブジェクトを実際に作成すると、これはうまく機能します。
しかし、Foo がインターフェースであり、その実装へのメソッド呼び出しをインターセプトしたい場合はどうでしょうか?
インターフェイスの既知の実装ごとに DelegatingMetaClass を持たずにこれを達成する方法はありますか?
groovy - Groovy で MetaClass メソッドから GroovyObject インスタンスを参照するにはどうすればよいですか?
これは私がやりたいことの不自然な例ですが、必要な動作を最小限に表現しています。プロパティ アクセスが呼び出されているオブジェクトのインスタンスを参照したいと考えています。最初に「this」を試しましたが、これは MetaClass または String インスタンスではなく、囲んでいるクラスを参照しています。
c# - UML 2 プロファイル パッケージ: 操作を拡張するには?
UML プロファイルの実装に大きな問題があります。問題は、Profile を使用して Infrastructure::Core::Constructs から UML Operation クラスを拡張する方法がわからないことです。
Profiles パッケージからの拡張機能の関連付けにより、uml メタモデルに従って、メタクラスを Core::Constructs::Class 型にすることのみが許可されます。
操作はメタクラスですか? それが Core::Consructs::Class としてどのように配置できますか? 私が見る限り、uml メタモデル操作は Core::Constructs::Class を特殊化または実装していません。
私を助けてください。
C# でサード パーティの UML 2.* メタモデル実装を使用して、C# で UML プロファイルの実装を作成しようとしています。