gpt4 book ai didi

python-3.x - 变量 "foo_class"作为类型无效,但为什么呢?

转载 作者:行者123 更新时间:2023-12-04 15:36:19 25 4
gpt4 key购买 nike

我有类似的东西:

from typing import Type


class Foo:
pass


def make_a_foobar_class(foo_class: Type[Foo]) -> Type[Foo]:

class FooBar(foo_class):
# this.py:10: error: Variable "foo_class" is not valid as a type
# this.py:10: error: Invalid base class "foo_class"
pass

return FooBar


print(make_a_foobar_class(Foo)())

运行 mypyclass FooBar(foo_class): 行抛出这两个错误(添加为注释 ^)

代码似乎工作得很好:

$ python this.py
<__main__.make_a_foobar_class.<locals>.FooBar object at 0x10a422be0>

我究竟做错了什么?

最佳答案

Mypy 和一般的 PEP 484 生态系统不支持创建具有动态基类型的类。

这可能是因为支持这样的特性不值得增加额外的复杂性:类型检查器需要实现额外的逻辑/额外的传递,因为它不能再通过检查变量名的集合来明确地确定父类型是什么当前在范围内,并且在一般情况下也不能再使用新的动态类准确键入检查代码。

在任何情况下,我都会建议重新设计您的代码以避免这样做,也许通过使用组合而不是继承或其他方式。

或者,您可以通过添加 # type: ignore 来抑制 mypy 生成的错误。注解。一旦类型检查完成,此注释将过滤掉与该特定行相关的所有错误。

例如:

from typing import Type

class Foo:
pass

def make_a_foobar_class(foo_class: Type[Foo]) -> Type[Foo]:

class FooBar(foo_class): # type: ignore
pass

return FooBar

print(make_a_foobar_class(Foo)())

关于python-3.x - 变量 "foo_class"作为类型无效,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634937/

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