如何定义一个类中的函数,使得函数的返回类型是“当前类”' - 而不是基类。例如:
Class Parent:
def set_common_properties_from_string( input : str ) -> <WHAT SHOULD BE HERE>
# Do some stuff you want to do in all classes
return self
Class Child( Parent ):
pass
def from_file( filename : str ) -> 'Child'
return Child().set_common_properties_from_string() # The return type of set_common must be Child
或者应该以某种方式投射它?如果返回类型是baseclass,那么它将给出错误。
我知道可以将它放到两行并添加用于保存Child()的临时变量,但我认为一个衬里更好看。
我使用mypy进行类型检查。
答案 0 :(得分:1)
您可以使用新实施的(仍然是实验性的)generic self功能,该功能旨在帮助您解决您遇到的问题。
Mypy支持&#34;通用自我&#34;截至version 0.4.6的特征(注意:截至撰写本文时,mypy的最新版本为0.470)。不幸的是,如果其他PEP 484兼容类型检查器支持此功能,我也不记得了。
简而言之,您需要做的是创建一个新的TypeVar,显式注释您的self
变量以具有该类型,并将TypeVar作为返回值。
因此,在您的情况下,您需要将代码修改为以下内容:
from typing import TypeVar
T = TypeVar('T', bound='Parent')
class Parent:
def set_common_properties(self: T, input: str) -> T:
# Do some stuff you want to do in all classes
return self
class Child(Parent):
def from_file(self, filename: str) -> 'Child':
# More code here
return Child().set_common_properties(...)
请注意,我们需要将我的TypeVar设置为由Parent
类限定 - 这样,在set_common_properties
方法中,我们可以调用任何其他生活方法在Parent
内。
您可以在mypy的网站和PEP 484中找到更多信息: