'Singledispatch和类型作为输入参数'

2024-10-05 14:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望能够做到:

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)

但是,我得到Invalid annotation for 'arg'. typing.Type[__main__.arg] is not a class.

我想singledispatch暂时还不能完全支持typing。有什么优雅的解决办法吗?在

升级版 我不能修改AB。在


Tags: fromimportregisterdefaulttypingfoodeftype
1条回答
网友
1楼 · 发布于 2024-10-05 14:25:46

您可以给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

相关问题 更多 >