Tzo*_*ker 7 python python-3.7 python-typing
我希望能够做到这一点:
from typing import Type
from functools import singledispatch
class A:
pass
class B(A):
pass
@singledispatch
def foo(arg):
print('default')
@foo.register
def _(arg: Type[A]):
print(arg)
foo(A)
foo(B)
Run Code Online (Sandbox Code Playgroud)
但是,我得到 Invalid annotation for 'arg'. typing.Type[__main__.arg] is not a class.
我想singledispatch暂时还不能完全支持typing。有什么优雅的解决方法吗?
我无法修改UPDA和B。
您可以给出A一个元类,然后 的所有子类都A将是该元类的实例:
from functools import singledispatch
class AMeta(type): pass
class A(metaclass=AMeta): pass
class B(A): pass
@singledispatch
def foo(arg):
print('default')
@foo.register
def _(arg: AMeta):
print('A or B')
foo(A) # A or B
foo(B) # A or B
foo(A()) # default
class C: pass
foo(C) # default
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |