将Pythons内置类型替换为自定义类型

时间:2012-08-03 01:01:34

标签: python object types built-in

是否可以用自定义的python替换一些内置的python类型?

我想创建类似的东西:

class MyInt(object):
   ...
__builtin__.int = MyInt
x = 5

3 个答案:

答案 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,您有两种选择:

  1. 将代码编译为AST并根据需要使用AST替换节点。
  2. 手工制作自己的AST。
  3. 获得AST后,您可以直接执行它。在任何一种情况下,请查看Python's Language Services以生成和操纵AST。