問題タブ [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 投票する
3 に答える
7524 参照

python - サブクラスを追跡するための汎用メタクラス?

サブクラスを追跡する汎用メタクラスを作成しようとしています

これを汎用にしたいので、このメタクラス内にクラス名をハードコーディングしたくなかったので、次のような適切なメタクラスを生成する関数を考え出しました。

このようにして、特定のルートクラスのメタクラスを生成するために呼び出すことができます。

ここで私は問題にぶつかります。これはできない:

...Root使用するときはまだ定義されていないためmake_subtracker(Root)。少なくともサブクラスに適用できるように、後で __metaclass__ 属性を追加してみました。

...しかし、これは機能しません。__metaclass__ には、クラス作成のカスタマイズで定義されているように、クラス定義が読み込まれるときに特別な処理があります。

これを行うための提案を探しています(実行時にクラスのメタクラスを変更して、サブクラスに適用するか、その他の代替手段を使用します)。

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

python - このオブジェクトのメタクラスでオブジェクトのパラメーターを取得する

私の問題は、python/django ミックスです。いくつかのフィールドを表示するフォーム モデルがあります。このモデルのいくつかのパラメーターに基づいて、このオブジェクトを作成するメタクラスに送信されるデータは異なるはずです。しかし、 Meta の本体内でこのパラメーターに到達するにはどうすればよいですか? object パラメーターの代わりにグローバル var を使用する必要がありますか (値を一時的に格納するためだけに導入されているため)。

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

groovy - metaClassという名前のキーをマップに配置します

非常に奇妙な動作を公開する小さなGroovyスクリプトを作成しました。誰かがそれを説明できますか?

その場合の私の質問は非常に単純です:なぜ最後の命令が以下の例外をスローするのですか?

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

groovy - Groovy が小文字 (メタ) のプロパティ名を作成しないようにするにはどうすればよいですか?

問題があります。私は醜い XML 構造を表現するために素敵なダイナミックな groovy クラスを持ちたいと思っています (残念ながら JAXB、XmlBeans などは不可能です)。この目標を達成するには、要素の値を XML からクラスにマップするために、大文字と小文字を区別するプロパティが必要です。

しかし、Groovy は JavaBeans 仕様により、自動的に小文字のプロパティ名を生成します。

この機能をオーバーライドして、自分のプロパティを保持できますか?

ありがとう

次に例を示します。

ソース XML は次のようになります。

XmlParser で解析し、いくつかのクラスを個別のノードで動作させます。

小文字の名前によるこの例の結果: 2 つの要素しか見つかりません。

私の現在の状況:

クラスの純粋な Java 部分を使用して、getDeclaredFields メソッドを呼び出してプロパティ名を取得しています。

しかし、質問はまだ興味深いです。

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

smalltalk - メタクラスのない Smalltalk はありますか?

少なくとも Squeak と Pharo では、各クラスには、クラスのクラスメソッドを保持する対応するメタクラスが付属しています。これはすべての Smalltalk に当てはまりますか?

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

groovy - GroovyClassLoader を使用してクラスのメソッドを動的に変更または追加できない

Groovy スクリプトで定義されたクラスのメソッドを別の Groovy スクリプトから動的に変更および追加しようとしましたが、クラス名を .metaClass で直接使用するとなぜ機能するのかわかりません。ただし、GroovyClassLoader を使用してクラスをロードする場合はそうではありません (これを行う必要があります!)。

1つのファイル「MyTest.groovy」に

および別のファイル「suite.groovy」が含まれています

最初の方法では、期待される結果が得られます。

しかし、私が得る2番目のもので

興味深いことに、既存のメソッドを変更しても機能しませんが、例外はありませんが、新しいメソッドを追加しようとするとスローされます。使用されているクラスローダーで何かをしなければならないと思いますが、何を正確に何を変更すればよいのかわかりません! 最初のバージョンでは、次のクラス ローダーが呼び出されます。

2 番目のバージョンの場合:

どんなアイデアでも大歓迎!
フランク

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

methods - メソッドをメタクラスに追加

Groovy のメタクラス プログラミングで遊んでいます。しかし、突然、私は仕事をすることができなかった小さな問題に直面していました...

簡単なスクリプトは次のとおりです。

メソッドを使用して、最初のパラメーターを呼び出し元のオブジェクトに設定することはできますか? デリゲートの使用は機能しないようです...呼び出し元を参照しないメソッドの割り当ては問題ありません。ここでカレーは機能しますか?

ありがとう、インゴ

0 投票する
7 に答える
15129 参照

python - 宣言と同じ順序でクラス属性を読み取る方法は?

クラス属性を読み取ってリストに格納するメタクラスを作成していますが、リスト (cls.columns) で宣言順序 (つまり、私の例では , , , , ) を尊重する必要mycol2mycol3ありzutますcoolmenfina

結果:

これは、クラスのColumn()属性の宣言順序を尊重しません。Listing直接使用classDictしても、どちらも役に立ちません。

どうすれば続行できますか?

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

python - ポリモーフィック ID の SQLAlchemy 構文を拡張する

列をポリモーフィックとしてEntity定義する宣言型の基本クラスがあります。name

サブクラスでは、私は今言うことができます

そして行われます。ただし、ライブラリのユーザー向けのサブクラスの作成を容易にしたいため、次のことが可能になります。

  • デフォルトの構文ほど複雑ではない、より良い構文を用意してください。これは、クラス内の単純な割り当てpoly_id = "exp"またはクラス デコレータの可能性があります。
  • polymorphic_identity が指定されていない場合は、サブクラスの名前から名前を抽出します。

メタクラスを使用してこれを実行しようとしました (2 番目の部分のみ)。

そのため、私の意見では、Metaを呼び出す前に名前を設定する必要DeclarativeMetaがありますが、機能していないようです。したがってDeclarativeMeta、ポリモーフィック名を設定すると思われる は、MRO を台無しにしたために変更を認識しないか、とにかく私がやっていることは明らかに間違っています。何を変更する必要がありますか、または SQLAlchemy にはすでにこのようなものがありますか?

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

python - 派生時の自動クラス装飾 (または検証)


複数のサブクラスを派生させる基本クラスがあります。
各サブクラスはクラス定数を定義しており、それらに特定の制限を適用したいと考えています。例えば:

ルール (NOM % DENOM == 0) を適用できるようにしたい。
私は現在、クラスデコレータでこれを行っています:

しかし、各サブクラスを装飾する必要があるという事実は好きではありません (たくさんあります)。Base クラスを直接操作することでこれを実行できるかどうかに興味があります。

何かアドバイス?