問題タブ [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 - Djangoの抽象基本クラスのように動作するクラスをPythonで作成するにはどうすればよいですか?
私は既存のDjangoライブラリを使用しており、抽象化したいクラスを作成しています。
問題のクラスがであるとしましょうBaseFoo
。
現在、実装には基本クラスがありBaseFoo
ます。
拡張するクラスが作成されるたびBaseFoo
に、メタクラスはそれをクラスのリストに追加します。BaseFoo
クラス名のハードコードされたテストを実行しても、明示的に追加されません。
私は次のようなものを書けるようになりたいです:
そして、メタクラスBaseFoo
に抽象であるすべてのオブジェクトをスキップさせます。ですから、Djangoがモデルで同じことをどのように行うのか、そしてこれを自分で行うための簡単でエレガントな方法があるのかどうか疑問に思っていると思います。
Djangoがモデルを定義するために使用するコードのいくつかを調べましたが、いくつかのポインターを使用することもできます。また、必ずしも使用せずにこれを行うさらに簡単な方法がある場合は、class Meta
私もそれを受け入れます。
私はこの解決策に特に興奮していないことに注意してください:
python - メタクラスミックスインまたはチェーン?
メタクラスを連鎖させることは可能ですか?
名前空間dictを処理するためModel
に使用するクラスがあります。__metaclass__=ModelBase
それを継承し、別のメタクラスを「バインド」して、元のメタクラスをシェーディングしないようにします。
最初のアプローチはサブクラス化することclass MyModelBase(ModelBase)
です:
しかし、明示的なサブクラス化なしで、ミックスインのようにそれらをチェーンすることは可能ですか?何かのようなもの
__metaclass__
...またはさらに良い方法:それを使用するクラスの直接の親から使用するMixInを作成します。
理由:既存のアプリをより柔軟に拡張するために、実行時に変更できるように、Djangoの定義のプロセスModel
にフックするためのグローバルメカニズムを作成したいと思います。Form
一般的なメカニズムは、コールバックミックスインを使用して複数のメタクラスを実装するよりもはるかに優れています。
あなたの助けを借りて、私はついに解決策を思いつくことができました:メタクラスMetaProxy
。
アイデアは次のとおりです。コールバックを呼び出して作成中のクラスの名前空間を変更するメタクラスを作成し、次に、の助けを借りて__new__
、親の1つのメタクラスに変更します。
testing - Grails サービスの結果をテストするためにクロージャをモックする方法は?
次のようなコードの戻り値を単体テストしたいと思います。
単体テスト コード計画:
どうやってやるの?ありがとう!
django - Django:継承のためにdb_tableをパラメータ化する
Django がモデル フィールド属性db_table
を処理する方法と同様に、継承されたすべてのクラスに名前が含まれるように、基本クラスに Meta クラス属性を設定したいと考えています。related_name
したがって、継承されたモデル:
db table がありますprefix_submodel
。
それは可能ですか?Meta クラスは継承クラスのモデル名にアクセスできますか?
grails - メタプログラミングXMLSlurperの結果
私は、各エントリが次のようになっているTwitterフィードを丸呑みにしました。
などなど
grails / GSPで行う必要があるのは、次のような画像を表示することでした <img src=${tweet.imgUrl}/>
。これは、XML結果をメタプログラミングするための良いケースのように見えましたが、Groovynoobyとして問題があります。
少なくとも2つの「リンク」ノードがあり、画像のURLにrel="image"
属性があることを確認してください。だから私は試しました...
しかし、このようなエラーは私が超えることはできません:
助けていただければ幸いです
python - @propertyの後にクラスメソッドを装飾する
__init__
デコレータを使用する以外は、さまざまなオブジェクトのすべてのメソッドをラップしたいと思います。
ただし、プロパティインスタンスの結果のラッピングは、次のようになります。
目的の結果がこれと同等の場合:
プロパティオブジェクトの属性は読み取り専用であり、プロパティが関数をラップした後に関数を変更できないようです。私はすでに必要なハッカーのレベルにあまり慣れていないので、とにかくプロパティオブジェクトを掘り下げたくありません。
私が見ることができる他の唯一の解決策は、私が避けたいと思っていたメタクラスをその場で生成することです。明らかな何かが欠けていますか?
collections - Groovy配列を比較可能にする方法は?
このように試しました:
うまくいきません。
まだ例外の上昇がありますgroovy.lang.GroovyRuntimeException: Cannot compare java.util.ArrayList with value '[1]' and java.util.ArrayList with value '[2]'
python - 任意に置換された属性名を持つ Python クラスの作成
この質問に適切なタイトルを付けなかったことをお詫びします。投稿する理由は、探しているものを知るための正しい用語さえ持っていないからです。
属性「スパム」を持つクラスを定義しました。
まったく同じ機能を持つ (サブ/兄弟?) クラスを作成したいのですが、「spam」ではなく「eggs」という名前の属性を使用します。
一般化すると、機能的に同一のクラスを任意の属性名で作成するにはどうすればよいですか? クラスの動作が複雑な場合、コードを複製するのはばかげているように思えます。
更新:これは悪いデザインの匂いがすることに同意します。明確にするために、私はこのばかげた方法で特定の問題を解決しようとしているわけではありません。__dict__
機能を維持しながら、オブジェクトの (非魔法の) コンテンツに任意に名前を付ける方法を知りたいだけです。keys()
のようなオブジェクトのメソッドのようなものを検討してくださいdict
。人々は慣習に従って動作するメソッドを使用してさまざまなクラスを作成しますkeys()
が、命名規則は良いことです。しかし、名前は任意です。ソース内の /keys/spam/ を手動で置換せずspam()
に正確に置換するメソッドでクラスを作成するにはどうすればよいですか?keys()
ジェネリック属性を参照するためのオーバーロード__getattr__
と友人は、私にはエレガントで壊れやすいようです。サブクラスがこれらのメソッドを再実装する場合、この動作に対応する必要があります。単純にアクセスできる名前付き属性を持つ単純な基本クラスがあることをユーザーに見せたいと思います。
実際、もっともらしいユースケースを思いつくことができます。特別な属性を付与する mixin クラスと、この属性を操作または依存するいくつかの密接に関連したメソッドが必要であるとします。ユーザーは、この特別な属性にクラスごとに異なる名前を付けたい場合があります (実際の問題領域で名前を一致させるため、または名前の衝突を避けるため)、基礎となる動作を再利用します。
python - Pythonでクラスを不変にする方法
私は、いくつかのマシンがすべて同じバージョンのさまざまなクラスを持っているという仮定の下で通信する分散コンピューティングを行っています。したがって、これらのクラスを不変にするのは良い設計のようです。悪意のあるユーザーを阻止しなければならないという意味ではなく、誤って変更されることがないように不変であるだけです。
どうすればいいですか?たとえば、定義後にそれを使用するクラスを不変にするメタクラスをどのように実装しますか?
クラスを受け取り、不変のクラスを返すデコレータ/関数など、代替メソッドも問題ありません。
python - Pythonで`with`を使用する個別のクラス
次のクラスがある場合:
そして、check_foo.pyというファイルでこのように使用します
インポートcheck_foo
して実行すると、モジュールdir(check_foo)
は1つだけになります。check_foo.Foo
PEP 343には、次のようなことができると記載されていることを知っています。
そして、それはで適切にインスタンス化されますcheck_foo
がcheck_foo.naming_it
、私の質問は、これを回避して名前を動的に設定することが可能であるということです。
私は概念実証で遊んでいて、上記のアイデアでどこまで到達できるか知りたいです。
渡した文字列を使用してインスタンスに名前を付けることは可能Foo
でしょうか?
注:私も知っていwithhacks
ます。私がそれを見てみることを提案しないでください:)