输入工厂方法的注释

时间:2020-06-18 17:50:46

标签: python typing pytype

假设我有一个用作工厂的类方法:

class Foo:

  def __init__(self, text):
    self.text = text

  @classmethod
  def from_file(cls, path):
    with open(path, 'rt') as f:
      return cls(f.read())


class Bar(Foo):

  def lines(self):
    return self.text.count('\n')


print(Bar.from_file('bar.txt').lines())

现在我想为此添加pytype注释。 from_file类方法应使用哪些注释?仅将其标记为-> 'Foo'并不能捕获在Bar这样的派生类的情况下已知的更具体的类型。因此,print调用中的表达式将不知道它是Bar并且具有lines。我如何表示结果将是参数cls的实例?

1 个答案:

答案 0 :(得分:1)

您可以为此使用类型变量。

from typing import Type, TypeVar


FooType = TypeVar('FooType', bound='Foo')


class Foo:

  text: str

  def __init__(self, text: str):
    self.text = text

  @classmethod
  def from_file(cls: Type[FooType], path: str) -> FooType:
    with open(path, 'rt') as f:
      return cls(f.read())


class Bar(Foo):

  def lines(self) -> int:
    return self.text.count('\n')


print(Bar.from_file('bar.txt').lines())