python中类型注解可以显著提升程序的可读性,关于变量,函数参数及返回值的相关使用方法很多地方有介绍,就不再重复了。只有一点,在类中,需要引用当前定义的类时,这时比较麻烦些,如下面的代码:
class Deck:
@classmethod
def create(cls, shuffle: bool = False) -> Deck:
"""Create a new deck of 52 cards"""
cards = [Card(s, r) for r in Card.RANKS for s in Card.SUITS]
if shuffle:
random.shuffle(cards)
return cls(cards)
这个代码针对第3行函数返回类型Deck由于Deck类还没有完全定义,因此是会报错的,且不能运行。
据说此功能需要在Python4.0中才能通过,不过在Python3.7及更高版本中,可以通过导入__future__属性的annotations来实现:
from __future__ import annotations
class Deck:
@classmethod
def create(cls, shuffle: bool = False) -> Deck:
...
这个问题前段时间搞了好久,一直没解决,回头查了半天,终于找到了相关的讨论: