加载对象时如何在 Python 中使用类型提示
How to use type hinting in Python when loading objects
如何在 class 中提醒 python return 类型的 pickle.load() 命令,其中 load() 命令 returns class.
的对象
我希望直截了当
class myClass:
@classmethod
def load(cls, filename) -> myClass:
with open(filename,'rb') as f:
return pickle.load(f)
可以,但是 python 抱怨 myClass 没有定义。
我想让 python 知道用于代码完成等的 class 类型。
你可能知道,在你定义classmethod的时候,myClass
还不存在,所以你不能直接引用它。
指定的替代方法是使用对象的字符串表示形式。它并不完美,但归根结底,类型提示并不是一种严格的执行方式;这只是一个非正式的提示。
来自PEP 484:
When a type hint contains names that have not been defined yet, that
definition may be expressed as a string literal, to be resolved later.
class myClass:
@classmethod
def load(cls, filename) -> 'myClass':
with open(filename,'rb') as f:
return pickle.load(f)
事实上,该 PEP 中有一个与您的示例非常相似的示例:
class Tree:
def __init__(self, left: 'Tree', right: 'Tree'):
self.left = left
self.right = right
如何在 class 中提醒 python return 类型的 pickle.load() 命令,其中 load() 命令 returns class.
的对象我希望直截了当
class myClass:
@classmethod
def load(cls, filename) -> myClass:
with open(filename,'rb') as f:
return pickle.load(f)
可以,但是 python 抱怨 myClass 没有定义。
我想让 python 知道用于代码完成等的 class 类型。
你可能知道,在你定义classmethod的时候,myClass
还不存在,所以你不能直接引用它。
指定的替代方法是使用对象的字符串表示形式。它并不完美,但归根结底,类型提示并不是一种严格的执行方式;这只是一个非正式的提示。
来自PEP 484:
When a type hint contains names that have not been defined yet, that definition may be expressed as a string literal, to be resolved later.
class myClass:
@classmethod
def load(cls, filename) -> 'myClass':
with open(filename,'rb') as f:
return pickle.load(f)
事实上,该 PEP 中有一个与您的示例非常相似的示例:
class Tree:
def __init__(self, left: 'Tree', right: 'Tree'):
self.left = left
self.right = right