问题描述
你能告诉我这段代码有什么问题吗?
from multimethod import multimethod
from typing import Iterable
@multimethod
def foo(x: Iterable[Iterable]):
print(x)
@multimethod
def foo(x):
print(x)
foo([range(1),range(2)])
我得到的错误是:
TypeError: type 'range' is not an acceptable base type
有趣的是,这些片段确实有效:
from multimethod import multimethod
@multimethod
def foo(x):
print(x)
foo([range(1),range(2)])
或
from multimethod import multimethod
from typing import Iterable
@multimethod
def foo(x: Iterable):
print(x)
@multimethod
def foo(x):
print(x)
foo([range(1),range(2)])
作为一点上下文,我想要做的是建立一个层次结构并根据 Iterable
持有的类型分派不同的函数:
from multimethod import multimethod
from typing import Generator,Iterable
import string
def gen(stop):
i = 0
for c in string.ascii_lowercase:
if i < stop:
i += 1
yield c
@multimethod
def bar(x: Iterable[range]):
print('bar(x: Iterable[range]')
@multimethod
def bar(x: Iterable[Generator]):
print('bar(x: Generator)')
@multimethod
def bar(x: Iterable[Iterable]):
print('bar(x: Iterable)')
#bar([range(1),range(2)])
bar([gen(2),gen(3)])
bar([[0,1,2],[0,2,3]])
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)