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

smalltalk - Smalltalk スーパークラスとメタクラス?

私はOOPを初めて使用しますが、「手続き型」のバックグラウンドを持っています。

私は現在、GNU Smalltalk と Lovejoy の「Smalltalk: Getting The Message」を介して OOP について理解を深めようとしています。

メタクラスとメタクラス クラスとスーパークラスの違いについて、私は混乱しています。スーパークラス -> クラス -> サブクラスの継承の流れを見ることができます。しかし、メタクラスがどのように/どこに収まるかわかりません.TIA ...

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

ruby - RubyのBaseとDerivedクラスのメタクラスの関係は?

Ruby ではsuper、次のコードが示すように、シングルトン メソッド内で使用して、対応するスーパー クラスのシングルトン メソッドを呼び出すことができます。

superただし、その呼び出しがwithinDerived.class_methodに到達する方法がよくわかりませんBase.class_method。メタクラスで定義されていると思いclass_methodますが、メタクラスに親子関係があるということですか? (実験で確かめることはできません)

更新: この質問をしているのは、基本クラスと派生クラスのメタクラスの間に何らかの関係があることをどこかで見たのを思い出したためです (しかし、それ以上は見つかりません)。実際にどのように機能するかを知ることに加えてsuper、2 つのメタクラスが完全に分離されているかどうかも確認したいと思います。

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

python - 型からメタクラスを継承するのは慣例ですか?

私は Python メタクラスを理解しようとしてきたので、いくつかのサンプル コードを調べてきました。私が理解している限り、Python メタクラスは任意の呼び出し可能にすることができます。したがって、メタクラスを次のようにすることができます

しかし、私は多くの人がメタクラスを次のように書いているのを見てきました:

私が見る限り、これらは両方とも同じことをします。代わりに基本クラスを使用する理由はありますか? 慣習ですか?

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

python - Python クラスの変更

Python のすべてのクラスを変更したいと思います。たとえば、str や int など、Person(object) などがあります。

それらに属性を追加し、そのメソッドの動作方法を変更したいと思います。

これに最適なアプローチはどれですか? メタクラス?

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

python - 多重継承と組み合わせてメタクラスを使用する TypeErrors

メタクラスと多重継承に関する 2 つの質問があります。1 つ目は、クラスでは TypeError が発生するのに では発生しないのはなぜDerivedですかDerived2?

正確なエラー メッセージは次のとおりです。

TypeError: Error when calling the metaclass bases Cannot create a consistent method resolution order (MRO) for bases object, Klass

super2 番目の質問は次のとおりです。この場合、なぜ機能しないのですか (__init__代わりにを使用すると__new__super再び機能します):

そこに私は得る:

TypeError: Error when calling the metaclass bases type.__new__(X): X is not a type object (str)

Python 2.6 を使用しています。

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

c - Objective-Cランタイムはどのようにしてルートメタクラスと他のクラスの説明をインスタンス化しますか?

基本的なオブジェクト指向のANSICランタイムを実装し、Objective-Cをガイドとして使用しようとしています。

それらは3つの部分のようです。クラスの説明、クラスインターフェイス、およびクラスの実装。クラスインターフェイスをインスタンス化するために、Classオブジェクトを使用してオブジェクトをインスタンス化するおなじみの方法は、ランタイムがクラスの説明を使用してクラスオブジェクトをすでにインスタンス化した場合にのみ発生します。

では、すべてのクラス定義は、Classオブジェクトを使用してインスタンス化する機能を提供するために、最初の実行時に静的に割り当てられますか?または、それらが動的に(最初の呼び出しで)割り当てられる場合、どのように?それは実行ループの一部ですか、それともクラスは実際にメッセージを転送する前にすでに割り当てられているかどうかを判断する関数ですか?

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

python - メタクラス ベースの呼び出し時のエラー: function() 引数 1 は、str ではなくコードである必要があります

今日、threading.Condition をサブクラス化しようとしましたが、うまくいきませんでした。threading.Condition クラスをサブクラス化しようとしたときの Python インタープリターの出力は次のとおりです。

誰かがこのエラーを説明できますか? ありがとう!

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

python - クラスインスタンスのメタクラスのメソッド

メタクラスで宣言されたメソッドはどうなるのだろうと思っていました。メタクラスでメソッドを宣言すると、最終的にはクラスメソッドになると思いましたが、動作は異なります。例

ただし、メタクラスを定義してメソッドfooを指定しようとすると、インスタンスではなく、クラスでも同じように機能するようです。

ここで何が起こっているのですか?

編集:質問をぶつける

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

grails - GroovyMetaClass-適切なメタクラスにカテゴリメソッドを追加します

Grailsプラグインで使用するカテゴリがいくつかあります。例えば、

これらのメソッドをメタクラスに追加して、カテゴリクラスを使用する必要がなく、インスタンスメソッドとして呼び出すことができるようにするための最良の方法を探しています。例えば、

これを行うのに役立つGroovy/Grailsクラスまたはメソッドはありますか、それともメソッドを繰り返し処理してすべて自分で追加することに固執していますか?