当前位置: 首页 > 面试题库 >

有没有办法在Python中为min和max返回自定义值?

慎俊雄
2023-03-14
问题内容

我有一个自定义课程,

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,也许我可以利用它。

也许有一种我不知道的魔术方法可以实现这一目标?


问题答案:

是。当min采用一个参数时,它假定它是可迭代的,对其进行迭代并采用最小值。所以,

class A:
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __iter__(self):
        yield self.a
        yield self.b

应该管用。

附加说明:如果您不想使用__iter__,我不知道这样做的方法。您可能想创建自己的min函数,_min_如果传递给它的参数中有一个方法,则调用某个方法,然后调用旧方法min

oldmin = min
def min(*args):
    if len(args) == 1 and hasattr(args[0], '_min_'):
        return args[0]._min_()
    else:
        return oldmin(*args)


 类似资料:
  • 问题内容: 我有一个定制课程, 这个类不可iterable或indexable之类的。如果有的话 可能的话,我想保持这种状态。有什么可能吗 喜欢下面的工作吗? 让我想到这个的是 以及 列为 中的“公共顺序操作” [文档](https://docs.python.org/3/library/stdtypes.html#通用-顺序- 操作)。自 已考虑 对于同一个文档的序列类型,我认为 对“range

  • 我目前正在努力实现一种保护隐私的数据挖掘算法。对于不同各方之间的通信部分,我使用的是Netty 4.0。双方之间的通信流如下所示: 其中是启动和控制整个计算的主方。安全多方乘法的逻辑位于 Netty 中。还有另一种用于安全添加的协议。 目前,我使用类似的解决方案,如Netty核心团队的Norman Maurer所示,以了解子协议计算是否已完成。但这感觉有点像是在对抗框架。 是否有办法从< code

  • 我只是想知道我是否有可能返回activePodcastViewData。每当我试图在GlobalScopeactivePodcastViewData.Without调用它时,我都不允许返回,我确实让一切正常工作fine.However我更新了我的存储库,将挂起方法添加到it.Hence我正在获取挂起函数应该只从协程或另一个挂起函数调用。 fun getPodcast(podcastSummaryV

  • 请就如何实现这一点提出一个方法? ========================================================================================================= jaspyt提供了3种不同的密码解密方法。我尝试了前两种方法,并且能够成功地加密/解密,但问题是密钥必须作为环境或系统属性传递。 第三种方法是使用自定义J

  • 我试图找到一个更好的解决方案,以防止Hibernate代理初始化时,通过MapSTRt将实体映射到响应DTO。 我一直在将我们的代码库转换为使用ModelMapper中的MapStruct。如果我想用ModelMapper完成我的要求,我可以做如下简单的事情: 自定义getter方法允许我检查是否已经从数据库中获取了字段,以避免N 1次初始化。 它看起来像: 我不能简单地覆盖普通的getter,因

  • 问题内容: 我想在Python中使用PhantomJS。我用谷歌搜索了这个问题,但是找不到合适的解决方案。 我发现 可能是一个不错的选择。但是我无法通过一些争论。 使用可能是目前合适的解决方案。我想知道是否有更好的解决方案。 有没有办法在Python中使用PhantomJS? 问题答案: 在python中使用PhantomJS的最简单方法是通过Selenium。最简单的安装方法是 安装NodeJS