Can you annotate return type when value is instance of cls?
给定一个具有用于初始化的帮助器方法的类:
1 2 3 4 5 6 7 8 | class TrivialClass: def __init__(self, str_arg: str): self.string_attribute = str_arg @classmethod def from_int(cls, int_arg: int) -> ?: str_arg = str(int_arg) return cls(str_arg) |
是否可以注释
我试过
使用泛型类型指示将返回
1 2 3 4 5 6 7 8 9 10 11 | from typing import Type, TypeVar T = TypeVar('T', bound='TrivialClass') class TrivialClass: # ... @classmethod def from_int(cls: Type[T], int_arg: int) -> T: # ... return cls(...) |
任何覆盖类方法但随后返回父类(
请参见PEP484的注释实例和类方法部分。
注:该答案的第一次修订建议使用前向参考。将类本身命名为返回值,但问题1212使使用泛型成为可能,这是一个更好的解决方案。
注释返回类型的一种简单方法是使用字符串作为类方法返回值的注释:
1 2 3 4 5 6 7 8 9 | # test.py class TrivialClass: def __init__(self, str_arg: str) -> None: self.string_attribute = str_arg @classmethod def from_int(cls, int_arg: int) -> 'TrivialClass': str_arg = str(int_arg) return cls(str_arg) |
这将传递mypy 0.560,而python没有错误:
1 2 | $ mypy test.py --disallow-untyped-defs --disallow-untyped-calls $ python test.py |