是否可以用自定义的python替换一些内置的python类型?
我想创建类似的东西:
class MyInt(object):
...
__builtin__.int = MyInt
x = 5
答案 0 :(得分:3)
您似乎在询问是否可以覆盖输入 literals 时创建的类型。答案是不。您无法使其x = 5
使用内置int
类型以外的其他类型。
您可以覆盖__builtin__.int
,但这只会影响名称int
的明确使用,例如,int("5")
时。这样做没什么意义;最好只使用常规课程并MyInt("5")
。
更重要的是,你可以在你的类上提供运算符重载,以便例如MyInt(5) + 5
工作并返回另一个MyInt。您可以通过为MyInt类编写__add__
方法(以及用于减法的__sub__
等)来实现此目的。)
答案 1 :(得分:2)
我不知道替换内置插件,但你当然可以创建一个继承它们的对象,和/或行为类似于它们。查找类似inherit from immutable
的内容,您应该找到显示覆盖__new__
的答案,或者对于后一个选项,请参阅“Emulating Numeric Types”
答案 2 :(得分:2)
由于您想编写Pythonesque DSL,您有两种选择:
获得AST后,您可以直接执行它。在任何一种情况下,请查看Python's Language Services以生成和操纵AST。