【发布时间】:2017-07-31 12:10:52
【问题描述】:
我们试图创建一个可变的 int,它从其他地方引用它的值。它似乎在大多数情况下都表现良好,但是,当将其交给范围时,我们会得到意想不到的结果。
子类包含一堆样板,所以我将包含我知道的方法,这些方法被范围调用以推断 int 的值,这将重现行为。
class IntRef(int):
def __init__(self, *args, **kwargs):
self.reference = 5
super().__init__()
def __le__(self, other):
return self.reference.__le__(other)
def __sub__(self, other):
return self.reference.__sub__(other)
...
这种行为:
a = IntRef()
list(range(a)) # [] not [0, 1, 2, 3, 4]
我相信我们已经实现了与 int 关联的所有 Dunder 方法,因此我希望 range 创建一个零 - 4 列表。
在查找值时,range 是否会假设“值”在 int 类型类中的存储位置?在 Python 中制作透明引用类型框的最佳方法是什么?
谢谢
【问题讨论】:
-
range应该如何知道它应该访问其参数的reference属性?换句话说,它只是认为你通过了0:a = IntRef() ; print(a) # 0
标签: python-3.x reference int subclassing