基本的に私の問題は次のとおりです...
Python では、出力文字列を次の形式で返す関数があります。
'union(symbol(a), symbol(b))'
この文字列内にある関数形式は、実際には RegExTree というオブジェクト クラスに存在します。さらに、このクラスには、以下に示すように、関数 "construct()" を使用してツリー データ構造を構築する関数が含まれています。
tree = RegExTree()
tree.construct(union(symbol(a), symbol(b))
上記の 2 行のコードは正常に機能し、構築関数内の引数の解析に基づいてツリーを構築します。同様の方法で文字列を渡したいのですが、おそらくこのコード行は私が望むものを示しています:
tree = RegExTree()
expression = 'union(' + 'symbol(' + 'a' + ')' + ', ' + 'symbol(' + 'b' + ')' + ')'
tree.construct(expression)
現在、上記のようにコードを記述した方法では、(Linux ターミナルで) 次のようなエラーが発生します。
$ Attribute Error: 'str' object has no attribute 'value'
文字列を有効な引数/コード行として解釈するようにPythonに強制できますか? 本質的には、文字列としてではなく、オブジェクト コンストラクターとしてです。
オブジェクトに解析/コンパイルされたものとしてPythonに文字列を解釈させ、同じ最終目標を記述するためのコード行であるかのように文字列からオブジェクトを構築させる方法はありますか? ある種のバックドア型変換を求めているのですか? それとも、私が求めていることはプログラミング言語、特に Python では不可能ですか?
編集:「eval()」を含む、以下に提示されたMichaelのソリューションを使用して、これをフォームにハックする1つの方法があります:
tree = RegExTree()
a = 'a'
b = 'b'
expression = 'union(' + 'symbol(' + a + ')' + ', ' + 'symbol(' + b + ')' + ')'
tree.construct(eval(expression))
これを行うより良い方法はありますか?それとも、関数を表す文字列としての出力の性質が単に良い考えではないということですか? [私のソリューションの編集を修正してくれてありがとうマルティノー!]