我最近开始玩 Sage,我开始怀疑标准的 Python int
包装在一个名为 Integer
的自定义类中在鼠尾草。如果我输入 type(1)
在 Python 中,我得到 <type 'int'>
, 但是,如果我在 sage 提示中输入相同的内容,我会得到 <type 'sage.rings.integer.Integer'>
.
如果我想替换 Python int
(或 list
或 dict
)与我自己的自定义类,如何完成?会有多困难(例如,我可以完全用 Python 完成吗)?
最佳答案
作为其他答案的补充:在运行任何代码时,Sage 都有一个预处理步骤,可将 Sage-Python 转换为真正的 Python(然后执行)。这是由 preparse
函数完成的,例如
sage: preparse('a = 1')
'a = Integer(1)'
sage: preparse('2^40')
'Integer(2)**Integer(40)'
sage: preparse('F.<x> = PolynomialRing(ZZ)')
"F = PolynomialRing(ZZ, names=('x',)); (x,) = F._first_ngens(1)"
这一步正是允许透明使用 Integer
(代替 int
)和其他非标准语法(如上面的多项式环示例)和 [a..b]
等)。
据我所知,这是在 Python 中完全透明地使用内置类型替换的唯一方法。
关于python - 使用 Python 创建自定义语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10376129/