【问题标题】:Is there any way to override Python's built-in class?有没有办法覆盖 Python 的内置类?
【发布时间】:2017-05-26 15:13:21
【问题描述】:

我正在尝试更改 python 的 int 类的行为,但我不确定是否可以使用纯 python 来完成。到目前为止,这是我尝试过的:

import builtins
class int_new(builtins.int):
    def __eq__(self, other):
        return True
int = int_new
print(5 == 6) # the result is False, but I'm anticipating True

【问题讨论】:

  • Override int()的可能重复
  • 如果不重新编译 Python 完全不可能 - 从数字文字创建 int 对象的级别远低于您可以覆盖的级别。此外,在您的程序开始运行之前,5 和 6(以及数百个其他数字)已经被创建为缓存的 int 对象。
  • 我很好奇您为什么需要这样做?你的用例是什么?

标签: python python-3.6


【解决方案1】:

您应该将最后一行替换为:

print(int(5) == int(6))

强制/要求 Python 将新类用于整数。

【讨论】:

  • 我认为这失去了意义。如果是这样,我可以使用任意类并且不必包含int=int_new
  • Python 解释器/语法规定如何解释文字。根据语法,文字 5 表示内置类 int 的一个实例,并且不能更改,除非您更改 CPython 源代码。因此,创建特殊子类实例的唯一选择是明确告诉 Python 构建它们。
【解决方案2】:

一年后,我终于明白了我在想什么。当我学习 Python 时,我并没有接触到原始类型是什么的概念。在学习了 C++ 之后,我意识到我实际上想知道是否可以将原始类型替换为其他自定义类型。答案显然是否定的。

【讨论】:

  • 问题不是int是原始类型,而是Python VM使用内置的int作为int字面量的类型,而且没有简单的方法改变这个。
  • 在python中是可以的,你可以导入ctypes模块来改变值,但这不是什么好事,而且可能会破坏其他东西
猜你喜欢
  • 2020-08-29
  • 2010-11-22
  • 2010-10-15
  • 2018-10-05
  • 1970-01-01
  • 1970-01-01
  • 2011-12-25
  • 2020-09-15
相关资源
最近更新 更多