ScalaからPythonに作成したドメイン固有言語のインタープリターを移植しています。その過程で、私が広く使用したScalaのケースクラス機能をエミュレートする方法をpythonicで見つけようとしました。結局、isinstanceを使うことにしましたが、何かが足りないのではないかと感じました。
isinstanceの使用を攻撃するこのような記事は、根本的な書き直しを伴わない私の問題を解決するためのより良い方法があるかどうか疑問に思いました。
For、While、Break、Return、Statementなど、それぞれが異なるタイプの抽象構文ツリーノードを表すPythonクラスをいくつか構築しました。
Scalaでは、次のような演算子評価の処理が可能です。
case EOp("==",EInt(l),EInt(r)) => EBool(l==r)
case EOp("==",EBool(l),EBool(r)) => EBool(l==r)
これまでのところ、Pythonへの移植では、elifブロックとisinstance呼び出しを多用して、同じ効果を実現しました。これは、はるかに冗長で非Pythonです。もっと良い方法はありますか?