問題タブ [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.

0 投票する
1 に答える
646 参照

python - Djangoの抽象基本クラスのように動作するクラスをPythonで作成するにはどうすればよいですか?

私は既存のDjangoライブラリを使用しており、抽象化したいクラスを作成しています。

問題のクラスがであるとしましょうBaseFoo

現在、実装には基本クラスがありBaseFooます。

拡張するクラスが作成されるたびBaseFooに、メタクラスはそれをクラスのリストに追加します。BaseFooクラス名のハードコードされたテストを実行しても、明示的に追加されません。

私は次のようなものを書けるようになりたいです:

そして、メタクラスBaseFooに抽象であるすべてのオブジェクトをスキップさせます。ですから、Djangoがモデルで同じことをどのように行うのか、そしてこれを自分で行うための簡単でエレガントな方法があるのか​​どうか疑問に思っていると思います。

Djangoがモデルを定義するために使用するコードのいくつかを調べましたが、いくつかのポインターを使用することもできます。また、必ずしも使用せずにこれを行うさらに簡単な方法がある場合は、class Meta私もそれを受け入れます。

私はこの解決策に特に興奮していないことに注意してください:

0 投票する
4 に答える
15634 参照

python - メタクラスミックスインまたはチェーン?

メタクラスを連鎖させることは可能ですか?

名前空間dictを処理するためModelに使用するクラスがあります。__metaclass__=ModelBaseそれを継承し、別のメタクラスを「バインド」して、元のメタクラスをシェーディングしないようにします。

最初のアプローチはサブクラス化することclass MyModelBase(ModelBase)です:

しかし、明示的なサブクラス化なしで、ミックスインのようにそれらをチェーンすることは可能ですか?何かのようなもの

__metaclass__...またはさらに良い方法:それを使用するクラスの直接の親から使用するMixInを作成します。


理由:既存のアプリをより柔軟に拡張するために、実行時に変更できるように、Djangoの定義のプロセスModelにフックするためのグローバルメカニズムを作成したいと思います。Form

一般的なメカニズムは、コールバックミックスインを使用して複数のメタクラスを実装するよりもはるかに優れています。


あなたの助けを借りて、私はついに解決策を思いつくことができました:メタクラスMetaProxy

アイデアは次のとおりです。コールバックを呼び出して作成中のクラスの名前空間を変更するメタクラスを作成し、次に、の助けを借りて__new__、親の1つのメタクラスに変更します。

0 投票する
2 に答える
2483 参照

testing - Grails サービスの結果をテストするためにクロージャをモックする方法は?

次のようなコードの戻り値を単体テストしたいと思います。

単体テスト コード計画:

どうやってやるの?ありがとう!

0 投票する
1 に答える
1201 参照

django - Django:継承のためにdb_tableをパラメータ化する

Django がモデル フィールド属性db_tableを処理する方法と同様に、継承されたすべてのクラスに名前が含まれるように、基本クラスに Meta クラス属性を設定したいと考えています。related_name

したがって、継承されたモデル:

db table がありますprefix_submodel

それは可能ですか?Meta クラスは継承クラスのモデル名にアクセスできますか?

0 投票する
1 に答える
749 参照

grails - メタプログラミングXMLSlurperの結果

私は、各エントリが次のようになっているTwitterフィードを丸呑みにしました。

などなど

grails / GSPで行う必要があるのは、次のような画像を表示することでした <img src=${tweet.imgUrl}/> 。これは、XML結果をメタプログラミングするための良いケースのように見えましたが、Groovynoobyとして問題があります。

少なくとも2つの「リンク」ノードがあり、画像のURLにrel="image"属性があることを確認してください。だから私は試しました...

しかし、このようなエラーは私が超えることはできません:

助けていただければ幸いです

0 投票する
3 に答える
5933 参照

python - @propertyの後にクラスメソッドを装飾する

__init__デコレータを使用する以外は、さまざまなオブジェクトのすべてのメソッドをラップしたいと思います。

ただし、プロパティインスタンスの結果のラッピングは、次のようになります。

目的の結果がこれと同等の場合:

プロパティオブジェクトの属性は読み取り専用であり、プロパティが関数をラップした後に関数を変更できないようです。私はすでに必要なハッカーのレベルにあまり慣れていないので、とにかくプロパティオブジェクトを掘り下げたくありません。

私が見ることができる他の唯一の解決策は、私が避けたいと思っていたメタクラスをその場で生成することです。明らかな何かが欠けていますか?

0 投票する
3 に答える
1052 参照

collections - Groovy配列を比較可能にする方法は?

このように試しました:

うまくいきません。

まだ例外の上昇がありますgroovy.lang.GroovyRuntimeException: Cannot compare java.util.ArrayList with value '[1]' and java.util.ArrayList with value '[2]'

0 投票する
4 に答える
685 参照

python - 任意に置換された属性名を持つ Python クラスの作成

この質問に適切なタイトルを付けなかったことをお詫びします。投稿する理由は、探しているものを知るための正しい用語さえ持っていないからです。

属性「スパム」を持つクラスを定義しました。

まったく同じ機能を持つ (サブ/兄弟?) クラスを作成したいのですが、「spam」ではなく「eggs」という名前の属性を使用します。

一般化すると、機能的に同一のクラスを任意の属性名で作成するにはどうすればよいですか? クラスの動作が複雑な場合、コードを複製するのはばかげているように思えます。

更新:これは悪いデザインの匂いがすることに同意します。明確にするために、私はこのばかげた方法で特定の問題を解決しようとしているわけではありません。__dict__機能を維持しながら、オブジェクトの (非魔法の) コンテンツに任意に名前を付ける方法を知りたいだけです。keys()のようなオブジェクトのメソッドのようなものを検討してくださいdict。人々は慣習に従って動作するメソッドを使用してさまざまなクラスを作成しますkeys()が、命名規則は良いことです。しかし、名前は任意です。ソース内の /keys/spam/ を手動で置換せずspam()に正確に置換するメソッドでクラスを作成するにはどうすればよいですか?keys()

ジェネリック属性を参照するためのオーバーロード__getattr__と友人は、私にはエレガントで壊れやすいようです。サブクラスがこれらのメソッドを再実装する場合、この動作に対応する必要があります。単純にアクセスできる名前付き属性を持つ単純な基本クラスがあることをユーザーに見せたいと思います。

実際、もっともらしいユースケースを思いつくことができます。特別な属性を付与する mixin クラスと、この属性を操作または依存するいくつかの密接に関連したメソッドが必要であるとします。ユーザーは、この特別な属性にクラスごとに異なる名前を付けたい場合があります (実際の問題領域で名前を一致させるため、または名前の衝突を避けるため)、基礎となる動作を再利用します。

0 投票する
3 に答える
11347 参照

python - Pythonでクラスを不変にする方法

私は、いくつかのマシンがすべて同じバージョンのさまざまなクラスを持っているという仮定の下で通信する分散コンピューティングを行っています。したがって、これらのクラスを不変にするのは良い設計のようです。悪意のあるユーザーを阻止しなければならないという意味ではなく、誤って変更されることがないように不変であるだけです。

どうすればいいですか?たとえば、定義後にそれを使用するクラスを不変にするメタクラスをどのように実装しますか?

クラスを受け取り、不変のクラスを返すデコレータ/関数など、代替メソッドも問題ありません。

0 投票する
1 に答える
209 参照

python - Pythonで`with`を使用する個別のクラス

次のクラスがある場合:

そして、check_foo.pyというファイルでこのように使用します

インポートcheck_fooして実行すると、モジュールdir(check_foo)は1つだけになります。check_foo.Foo

PEP 343には、次のようなことができると記載されていることを知っています。

そして、それはで適切にインスタンス化されますcheck_foocheck_foo.naming_it、私の質問は、これを回避して名前を動的に設定することが可能であるということです。

私は概念実証で遊んでいて、上記のアイデアでどこまで到達できるか知りたいです。

渡した文字列を使用してインスタンスに名前を付けることは可能Fooでしょうか?

注:私も知っていwithhacksます。私がそれを見てみることを提案しないでください:)