ホームページ > バックエンド開発 > Python チュートリアル > Python のランタイム メタプログラミング パターンは興味深いです

Python のランタイム メタプログラミング パターンは興味深いです

Patricia Arquette
リリース: 2024-12-23 21:40:16
オリジナル
905 人が閲覧しました

This Runtime Meta-Programming Pattern in Python is Interesting

背景

私は現在、Pyodide 上に構築された Zenaura という UI フレームワークに取り組んでいます。最近、ビルダー インターフェイス (ユーザーが UI 要素を作成する主な方法) が少し複雑すぎて魅力がないことに気づきました。 Zenaura の仮想 DOM「ノード」データ構造と対話するための、基盤となるより煩雑なインターフェイスを抽象化しましたが、それでも満足のいくものではありませんでした。私は、まったく新しい構文用のコンパイラーを開発する可能性があるための基礎を築きながら、物事を簡素化し、よりクリーンで直感的なエクスペリエンスをユーザーに提供したいと考えていました。このようなもの:

div(attr1=val1, child1, child2, child3)
ログイン後にコピー

問題提起

現在のビルダー インターフェイスは低レベルすぎてユーザーフレンドリーではありません。ユーザーは次のような操作を行う必要はありません:

builder = Builder(name__)
if children:
    builder.with_children(*children)
if attributes:
    builder.with_attributes(**attributes)
if text:
    builder.with_text(text)
# print("data", builder.node.children, builder.node.attributes)
return builder.build()
ログイン後にコピー

代わりに、次のような、よりクリーンで読みやすい構文を使用できるようにする必要があります。

div(id="some-id", h1("text"), p("text"))
ログイン後にコピー

MDN ドキュメントを見ると、HTML タグが 91 個あり、追加または廃止される可能性があります。私は最初、このプロセスを簡素化するためにコードを動的に生成することを検討しましたが、それは機能しますが、最も実用的な解決策ではありません。主な目標は、ユーザーが関数を呼び出すたびにドキュメント文字列を表示することでしたが、動的に生成されるアプローチでは、オートコンプリートの欠如など、いくつかの課題が生じます。

ダイナミックなアプローチ

これが私が実験した動的に生成されたコードです:

tag_config = {
    # root elements
    "html": "nestable",
    "main": "nestable",
    "body": "nestable",
}

tags_factory = {
    "nestable": lambda name__: f"""
{name__} = partial(nestable, "{name__}")
{name__}.__doc__ = nestable.__doc__
""",
    "textable": lambda name__: f"""
{name__} = partial(textable, "{name__}")
""",
    "self_closing": lambda name__: f"""
{name__} = partial(self_closing, "{name__}")
""",
    "nestable_no_attrs": lambda name__: f"""
{name__} = partial(nestable_no_attrs, "{name__}")
"""
}

for k, v in tag_config.items():
    exec(tags_factory[v](k), globals())
ログイン後にコピー

これは機能の点ではうまく機能しますが、使いやすさの点では不十分です。主な欠点は、コードが実行時に挿入されるため、オートコンプリートがないことです。ただし、HTML タグ自体は比較的単純なので、現時点ではそれほど心配する必要はありません。

利点と制限事項

このアプローチの重要な利点の 1 つは柔軟性です。 Zenaura での HTML 要素のサポートまたは非推奨は、tag_config ディクショナリにキーと値のペアを追加または削除するのと同じくらい簡単です。これは、時間の経過による HTML タグの変更に適応する簡単な方法です。

さらに、唯一の制限はオートコンプリートとユーザーへのドキュメント文字列の表示です。HTML 要素は非常に基本的なものであるため、これはトレードオフとして問題ないと思います。

しかし、そのトレードオフは使いやすさという形で現れます。オートコンプリートがないと、ユーザーはインターフェイスを操作するときに課題に直面する可能性があります。そうは言っても、これは Zenaura でタグ要素を処理する新しい方法を実験するための良い出発点であると私は信じています。

以上がPython のランタイム メタプログラミング パターンは興味深いですの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート