【问题标题】:Type annotations for class parameters and return values类参数和返回值的类型注解
【发布时间】:2020-05-01 02:20:23
【问题描述】:

假设我有以下内容:

from __future__ import annotations

class A(object):

    @classmethod
    def some_class_method(cls: ?, parameter: str) -> ?:
        return A

如果我想明确指出some_class_method 正在返回A 类并且不是A 类的实例,? 应该变成什么.

编辑:@chepner 提出了一个很好的观点,? 可能是指 AA 的任何子类

【问题讨论】:

  • 请记住,some_class_method 确实可以将AA子类 作为参数。您真的要返回A,还是作为参数传递的类?
  • @chepner 是的,我明白你的意思。为了完整起见,有没有办法同时指定两者?因此,假设我只想为参数指定 A,但将 A 或任何子类指定为返回值。

标签: python python-3.x


【解决方案1】:

您不能使用A,因为它尚未定义。相反,您需要使用'A'。您还需要使用Type,因为'A' 表示A 的一个实例:

from typing import Type

class A(object):
    @classmethod
    def some_class_method(cls: Type['A'], parameter: str) -> Type['A']:
        return A

【讨论】:

  • OP 正在使用annotations,这会阻止评估所有注释。
  • 请记住,该类型仅指定返回值将是A 的子类,不一定是A 本身,也不一定是用于调用该方法的同一类。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-16
  • 2021-05-01
  • 1970-01-01
  • 2016-09-16
  • 1970-01-01
  • 2020-11-20
  • 2016-11-13
相关资源
最近更新 更多