問題タブ [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 - classmethod オブジェクトはどのように機能しますか?
Python で classmethod オブジェクトがどのように機能するか、特にメタクラスのコンテキストと__new__
. members
私の特別なケースでは、に与えられたを反復処理するときに、クラスメソッドメンバーの名前を取得したいと思い__new__
ます。
通常のメソッドの場合、名前は単純に__name__
属性に格納されますが、クラスメソッドの場合、そのような属性はないようです。__call__
属性も存在しないため、クラスメソッドがどのように呼び出されるかさえわかりません。
クラスメソッドがどのように機能するかを説明したり、ドキュメントを教えてもらえますか? グーグルは私をどこにも連れて行かなかった。ありがとう!
ruby - ruby のトップレベルでメソッドが定義されている場所は?
トップレベルでは、メソッド定義はプライベートメソッド on になるはずでObject
あり、テストはこれを裏付けているようです:
ただし、以下はトップレベルでも機能します (self.meta
は の固有クラスですmain
)。
このhello
メソッドは、 main の固有クラスと on で同時に定義されているようObject
です。どうしたの?false
パラメータ toprivate_instance_methods
は、メソッド リストからスーパー クラス メソッドを除外することに注意してください。
python - サブクラスで呼び出されていないメタクラス
これがPythonセッションです。
クラスXIを定義した後、Z._new __が呼び出され、発生していない2行を出力することを期待します(メタクラスは継承されますか?)
python - Pythonメタクラスとクラスデコレータ
Pythonメタクラスとクラスデコレータの主な違いは何ですか?一方ではできるが、もう一方ではできないことはありますか?
python - メタクラスからのメソッドの継承
この質問に示されている列挙コードの例では、以下に再現されていますが、メタクラスの実装とメタクラスからの実装がTOKEN
含まれているのはなぜですか?__contains__
__repr__
EnumerationType
次のコードによって例外がスローされ、__contains__
実装されていないことが予想されますが、代わりにTrue False
.
python - pythonはプログラム全体の__metaclass__を変更します
編集:これは本番コードで行うのは本当に悪い考えであることに注意してください。これは私にとって興味深いことでした。家でこれをしないでください!
Pythonでプログラム全体(インタープリター)の__metaclass__変数を変更することは可能ですか?
この簡単な例は機能しています。
しかし、サブモジュールでも機能するように__metaclass__を変更できるようにしたいと思います。したがって、たとえば(ファイルm1.py):
ファイルmain.py:
グローバル__metaclass__がPython3.Xで機能しなくなったことは理解していますが、それは私の懸念事項ではありません(概念実証の場合は私のコード)。では、Python-2.xでこれを実現する方法はありますか?
python - Pythonの組み込み__build_class__は何をしますか?
builtins
Python 3.1には、モジュールにわからない新しい組み込み関数があります。
この関数は何をしますか?内部にあるのに、なぜ組み込みである必要があるのですか?type(name, bases, dict)
機能の違いは何ですか?
python - メタクラスを定義するときに__init__ではなく__new__を選択する理由はありますか?
私はいつも次のようなメタクラスを設定してきました。
しかし、私はちょうどこのように定義されたメタクラスに出くわしました:
どちらか一方を優先する理由はありますか?
更新:メタクラスでの__new__
使用について質問していることを覚えておいてください。__init__
私はすでに別のクラスでそれらの違いを理解しています。しかし、メタクラスでは、メタクラスでのクラスの作成時にのみ呼び出される__new__
ため、キャッシュの実装には使用できません。__new__
objective-c - class_getClassVariable()は何をしますか?
インスタンス変数がクラスのインスタンスに属している場合、クラス変数はメタクラスのインスタンスに属していると思います。しかし、Objective-Cメタクラスでの私の経験から、これはありそうもないことがわかります。
class_getClassVariable
とは対照的に何が行われるclass_getInstanceVariable
のか、なぜclass_setClassVariable
ランタイムにがないのか疑問に思っています。
perl - Mooseを使用して属性のメタオブジェクトから値のインスタンスを作成するにはどうすればよいですか?
私は、Mooseを使用して、非標準形式に準拠するファイルの読み取りと書き込みを行うシリアル化ツールに取り組んでいます。今のところ、クラス内のオブジェクトのデフォルト値に基づいて次のアイテムをロードする方法を決定しますが、それには独自の欠点があります。代わりに、属性メタクラスの情報を使用して、適切なタイプの新しい値を生成できるようにしたいと思います。'isa'制限が何であるかを判断し、そこからジェネレーターを導出する方法があると思いますが、Moose :: Meta::AttributeまたはClass::MOP::Attributeに役立つ特定のメソッドはありませんでした。
ここにもう少し例があります。次のクラスがあるとしましょう。
(詳細な説明:このファイルタイプのシリアル化の役割My::Role::Load
をMy::Role::Save
実装します。それらは、接続されているクラスの属性を反復処理し、シリアル化する順序について属性クラスを調べます。)
このMy::Role::Load
ロールでは、クラスのメタオブジェクトを反復処理して、使用可能なすべての属性を確認し、Order特性を持つ属性のみを選択できます。
isa
ここで、メタ属性が表す属性について知る必要があります。今、私はそれのインスタンスを取得し、次のようなものでテストすることによってそれをテストします:
ただし、でわかるように# <-- ERROR PRONE PROBLEM HERE!
、このプロセス全体は、最初に属性に値があることに依存しています。値がundefの場合、何をロードするかはわかりません。$attribute->get_value($self)
代わりに、ロードする必要のある値のタイプに関する情報を取得する方法に置き換えたいと思います。私の問題は、上記でリンクしたドキュメントClass::MOP::Attribute
がMoose::Meta::Attribute
、属性が取得するはずのオブジェクトのタイプを取得する方法がないように見えることです。
属性のタイプ情報は、基本的に私が取得しようとしているものです。
Moose::Meta::TypeConstraint
(将来の読者への注意:ここでの答えは私を始めましたが、それ自体が最終的な解決策ではありません。私がここで探していることを実際に行うには、クラスを掘り下げる必要があります。)