base.py 文件源码

python
阅读 60 收藏 0 点赞 0 评论 0

项目:pyta 作者: pyta-uoft 项目源码 文件源码
def least_general_unifier(self, t1, t2):
        if isinstance(t1, TypeVar) and isinstance(t2, TypeVar):
            i1 = self._find(t1)
            i2 = self._find(t2)
            if issubclass(i1, i2):
                return i2
            elif issubclass(i2, i1):
                return i1
            else:
                return Any
        elif isinstance(t1, TypeVar):
            i1 = self._find(t1)
            if issubclass(i1, t2):
                return t2
            elif issubclass(t2, i1):
                return i1
            else:
                return Any
        elif isinstance(t2, TypeVar):
            return self.least_general_unifier(t2, t1)
        elif isinstance(t1, GenericMeta) and isinstance(t2, GenericMeta):
            return self._least_general_unifier_generic(t1, t2)
        elif isinstance(t1, CallableMeta) and isinstance(t2, CallableMeta):
            rtype = self._least_general_unifier_call(t1, *t2.__args__[:-1])
            return self.least_general_unifier(rtype, t2.__args__[-1])
        elif isinstance(t1, TupleMeta) and isinstance(t2, TupleMeta):
            return self._least_general_unifier_tuple(t1, t2)
        elif t1.__class__.__name__ == '_Union' or t2.__class__.__name__ == '_Union':
            pass
        elif t1 == Any or t2 == Any:
            return Any
        elif issubclass(t1, t2):
            return t2
        elif issubclass(t2, t1):
            return t1
        elif t1 != t2:
            return Any
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号