假设我有一个用作工厂的类方法:
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
的实例?
答案 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())