Python多态重载故障

卢卡·桑斯(Luca Sans S)

当尝试按照pep-3124 *中所述使用重载功能时,我遇到了一些麻烦:

[luca@artix tmp]$ more foo.py 
from overloading import overload
from collections import Iterable

def flatten(ob):
    """Flatten an object to its component iterables"""
    yield ob

@overload
def flatten(ob: Iterable):
    for o in ob:
        for ob in flatten(o):
            yield ob

@overload
def flatten(ob: basestring):
    yield ob
[luca@artix tmp]$ python3 foo.py 
/tmp/foo.py:2: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
  from collections import Iterable
Traceback (most recent call last):
  File "/usr/lib/python3.9/site-packages/overloading.py", line 63, in overload
    return register(__registry[fname], func)
KeyError: '__main__.flatten'

在处理上述异常期间,发生了另一个异常:

Traceback (most recent call last):
  File "/tmp/foo.py", line 9, in <module>
    def flatten(ob: Iterable):
  File "/usr/lib/python3.9/site-packages/overloading.py", line 65, in overload
    __registry[fname] = overloaded(func)
  File "/usr/lib/python3.9/site-packages/overloading.py", line 151, in overloaded
    return register(dispatcher, func)
  File "/usr/lib/python3.9/site-packages/overloading.py", line 199, in register
    signature = get_signature(fn)
  File "/usr/lib/python3.9/site-packages/overloading.py", line 441, in get_signature
    types = tuple(normalize_type(type_hints.get(param, AnyType)) for param in parameters)
  File "/usr/lib/python3.9/site-packages/overloading.py", line 441, in <genexpr>
    types = tuple(normalize_type(type_hints.get(param, AnyType)) for param in parameters)
  File "/usr/lib/python3.9/site-packages/overloading.py", line 468, in normalize_type
    if not typing or not isinstance(type_, typing.TypingMeta) or type_ is AnyType:
AttributeError: module 'typing' has no attribute 'TypingMeta'
[luca@artix tmp]$ 

请注意,我卸载了键入模块。


安禅

从到GitHub上的该线程

键入模块的降级帮助我(从python信息库)到3.5.2.2版。您也可以通过typing = None在文件的第30行之后分配,来强行忽略重载模块中overloading.py的键入模块,但是我认为键入模块功能将不可用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++函数重载(函数多态)

来自分类Dev

C ++:Operator =多态性重载

来自分类Dev

C ++多态性和重载?

来自分类Dev

C ++多态性,重载和继承

来自分类Dev

c ++中的动态多态和函数重载

来自分类Dev

Java多态性/重载惊喜

来自分类Dev

“多态适用于重载,而不适用于重载”?

来自分类Dev

“多态适用于重载,而不适用于重载”?

来自分类Dev

重载operator +和Segmentation故障C ++

来自分类Dev

Python条件替换多态

来自分类Dev

Hack语言会支持函数重载多态吗?

来自分类Dev

运算符重载与多态性差异

来自分类Dev

与多态相混淆:参数,包含,强制和重载

来自分类Dev

是否可以通过重载来实现多态?

来自分类Dev

多态和重载有什么区别?

来自分类Dev

任何方法重载是一个编译时多态?

来自分类Dev

与多态相混淆:参数,包含,强制和重载

来自分类Dev

C ++:运算符=具有多态性的重载

来自分类Dev

C ++中的运算符重载和多态

来自分类Dev

Hack语言会支持函数重载多态吗?

来自分类Dev

多态 - 方法覆盖和重载不清楚

来自分类Dev

列出故障?(Python)

来自分类Dev

Python中的方法重载:更多重载

来自分类Dev

用Boost Python暴露多态

来自分类Dev

python中的重载-熊猫

来自分类Dev

Python重载原语

来自分类Dev

Python重载__init__

来自分类Dev

构造函数重载python

来自分类Dev

python中的重载-Pandas