我正在将我创建的领域特定语言的解释器从Scala移植到Python。在这个过程中,我试图找到一种类似于Scala的case class功能的pythonic方法来模拟它,因为我经常使用它。最终,我采用了isinstance,但感觉可能错过了什么。
像这篇文章那样批评isinstance的使用让我想知道是否有更好的解决方法,而不需要进行基本重写。
我已经建立了许多Python类,每个类都代表不同类型的抽象语法树节点,例如For、While、Break、Return、Statement等。
Scala允许处理操作符评估,如下所示:
像这篇文章那样批评isinstance的使用让我想知道是否有更好的解决方法,而不需要进行基本重写。
我已经建立了许多Python类,每个类都代表不同类型的抽象语法树节点,例如For、While、Break、Return、Statement等。
Scala允许处理操作符评估,如下所示:
case EOp("==",EInt(l),EInt(r)) => EBool(l==r)
case EOp("==",EBool(l),EBool(r)) => EBool(l==r)
到目前为止,我在将代码转换为Python时广泛使用elif块和isinstance调用来实现相同的效果,这样做更冗长且不符合Python编程规范。是否有更好的方法?
isinstance
的密度也遵循着同样的规律。零是最好的,大于零则意味着存在设计问题。许多事物都对优秀编程有害,其中包括 GOTO 语句。 - S.Lott