gpt4 book ai didi

python - Singledispatch 和 type 作为输入参数

转载 作者:太空狗 更新时间:2023-10-30 00:12:28 25 4
gpt4 key购买 nike

我希望能够做到这一点:

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)

但是,我得到了 “arg”的无效注释。 typing.Type[__main__.arg] 不是一个类。

我猜 singledispatch 目前还不能完全支持 typing。有什么优雅的解决方法吗?

UPD我无法修改 AB

最佳答案

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

关于python - Singledispatch 和 type 作为输入参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55393179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com