【问题标题】:How to hint base class function that returns an instance of derived class it is called from?如何提示返回调用它的派生类实例的基类函数?
【发布时间】:2018-11-14 18:33:33
【问题描述】:

我想暗示 B-instance .duplicate_itself() 返回 B-instance,而不是 A-instance。

class A:
    def duplicate_itself(self) -> 'WHAT SHOULD I WRITE HERE?'
        return self.__class__()         

class B(A):
    pass

顺便说一句,我正在使用 PyCharm,所以如果你知道一些 PyCharm 特定的解决方案,请随时写一个答案

【问题讨论】:

  • PyCharm 与问题有何关联?
  • 我不确定,但由于类型提示是静态的,有可能吗?
  • @Aran-Fey,我添加了 pycharm 相关说明。

标签: python python-3.x pycharm type-hinting


【解决方案1】:

这可以通过将TypeVar 附加到self 来完成:

T = typing.TypeVar('T')

class A:
    def duplicate_itself(self: T) -> T:
        return self.__class__()

【讨论】:

  • 我很难理解docs。但现在一切都清楚了!会再读一遍。
  • @AlexanderChzhen -- 如果您想要更详细的文档,您可能需要查看mypy's -- 它通常会更彻底地解释 PEP 484 语义。警告:虽然大多数文档同时适用于 mypy 和 PyCharm(或任何符合 PEP 484 的类型检查器),但您可能会遇到一两个特定于 mypy 或 mypy 实现与 Pycharm 不同的部分。
猜你喜欢
  • 1970-01-01
  • 2019-04-02
  • 2013-07-07
  • 2012-04-16
  • 1970-01-01
  • 2019-07-25
  • 2019-07-16
  • 2018-10-21
  • 1970-01-01
相关资源
最近更新 更多