当尝试按照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] 删除。
我来说两句