Pythonにおける「メタプログラミング」とはどのようなものを表しますか?
例えば、引数nameに対して「handle_name」という名前のメソッドを持ったクラスをリターンする
generate_newClass(bases,*names) -> ClassObj などの関数は「メタ」ですか?
要するにall( issubclass(ReturnClassObj,baseCls) for baseCls in bases)がTrueで且つ
all( hasattr(ReturnClsObj,"handle_"%(name)) for name in names )な新しいクラスを返す関数です
またあるいは、あるクラスオブジェクトのすべてのメソッドをdirやらgetattrを通して抽出して、そのラッパーを元の名前に上書き(setattr(ClsObj(->もといNameSpace),methodname,wrapper))するのはメタですか?
カバレッジ算出のためとかにある名前空間上の任意の関数オブジェクトの呼び出しの監視をしたりするのに使う形と思います。
ラッパはクロージャーの枠組みで実装するから、その点実際の意味的文脈は専ら実行時に決定する点で普通のプログラミングのモデルとは少し違う感じがするし。あるいは「名前空間を覗いてすべての定義済みの名前を取得し精査にかけてメソッド抽出して,,その名前を全部元の関数をもとに生成した新しい関数で上書きして,,」っていうのがなんか偉そうなことやってるから。
もしどちらも「節子、それ"Meta"とちゃう」みたいなことなら、その何かモデルを挙げてみたいです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。