【发布时间】:2017-07-25 15:54:30
【问题描述】:
我有一个自定义类,
class A:
def __init__(self, a, b):
self.a = a
self.b = b
该类不可迭代或可索引或类似的东西。如果可能的话,我想保持这种状态。是否有可能有类似以下的工作?
>>> x = A(1, 2)
>>> min(x)
1
>>> max(x)
2
让我想到这一点的是min 和max 在docs 中被列为“通用序列操作”。由于range 被相同的文档认为是序列类型,所以我认为必须对range 进行某种优化,也许我可以利用它。
也许有一种我不知道的神奇方法可以实现这一点?
【问题讨论】:
-
你的意思是让它工作而不定义
__iter__/__next__?我不确定我是否理解您的困惑。 -
当您说“类不可迭代”时,您的意思是“类不可迭代但我愿意使其可迭代”,还是“类不可迭代且绝对必须保持这种状态”?
-
“我在想一定有某种可能的范围优化” 有趣的是,情况似乎并非如此;虽然理论上 O(1) 最小/最大算法应该可以用于范围对象,但无论输入类型如何,implementation 似乎都是 O(N)。
-
如果你不介意告诉我,我有点好奇为什么你不希望你的对象如此糟糕地可迭代。是为了防止用户做一些愚蠢的事情吗?也许有更好的方法?
-
@ChristianDean。我正在研究与
range等效的float数字。我想出了一个解决方案,当指定step时它是可迭代的,否则不可迭代。它仍然会提供有效的遏制测试和其他一些东西,所以min和max是有意义的,即使该步骤不存在。我想如果没有明确的步骤,我只需要允许它遍历边界。
标签: python python-3.x magic-methods