[英]When returning an instance of class Foo using self.__class__(), why does PyCharm think the type should be Optional[Type[Foo]]?
[英]Variable "foo_class" is not valid as type, but why?
我有類似的東西:
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)())
運行mypy
會在class FooBar(foo_class):
行拋出這兩個錯誤(添加為注釋 ^ class 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)())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.