gpt4 book ai didi

Python 类型检查和继承问题

转载 作者:行者123 更新时间:2023-11-28 22:06:56 26 4
gpt4 key购买 nike

我有一些依赖于类型检查的 Python 代码。我会尝试用数学语言来表达我的问题,这样就很清楚了。我有几个类,它们彼此对应并形成继承链。

class Real(object):
pass

class Integer(Real):
pass

class Natural(Integer):
pass

我有一个包含类型的元组。其中每一个都对应于某个函数的域。

t1 = ( Real, Real )
t2 = ( Real , Integer )

我想做某种形式的类型检查,这样如果元组中的每个坐标都是指定域的子类,则给出另一个元组(Natural,Natural)。例如,对于某些函数 get兼容 我想要:

getcompatibles( ( Real, Real ) ) = [ t1 ]
getcompatibles( ( Real, Integer ) ) = [ t1, t2 ]
getcompatibles( ( Natural, Natural ) ) = [ t1, t2 ]
getcompatibles( ( Natural, Real ) ) = [ t1 ]

我能想到的唯一解决方案是运行每个 for 域 (t1, t2),运行 __subclasses__ 中的每个类型,并检查它是否 isinstance 对于给定的输入为 True。

虽然效率极低,是否有一种更Pythonic的方式来做到这一点?

最佳答案

def compatible_pred(obj_types, fun_signature):
if len(obj_types) != len(fun_signature): return False
return all(issubclass(of, ft) for of, ft in zip(obj_types, fun_signature))

def is_compatible(obj_types, fun_signatures=(t1, t2)):
return [t for t in fun_signatures if compatible_pred(obj_types, t)]

不是谓词的东西的is_company名称确实非常令人困惑:为什么不给它一个明智的名称,例如getcompanys ,这样听起来强谓词的 is兼容 就可以用来代替我必须命名的 completed_pred

关于Python 类型检查和继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2867449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com