python怎么指定函数返回类型_如何指定方法的返回类型与python中的类本身相同?...

你参考下这样来:NameError: name 'Position' is not defined

官方建议:使用一个字符串

只需使用字符串而不是类本身:...

def __add__(self, other: 'Position') -> 'Position':

...

还有这样的方法:转发引用

当类型提示包含尚未定义的名称时,该定义可以表示为字符串文本,稍后解析。

发生这种情况的情况通常是容器类的定义,其中定义的类出现在某些方法的签名中。例如,以下代码(简单二叉树实现的开始)不起作用:class Tree:

def __init__(self, left: Tree, right: Tree):

self.left = left

self.right = right为了解决这个问题,我们写道:class Tree:

def __init__(self, left: 'Tree', right: 'Tree'):

self.left = left

self.right = right字符串文字应该包含一个有效的Python表达式(即,compile(lit,'','eval')应该是一个有效的代码对象),并且在模块完全加载后它应该没有错误地评估。在其中进行评估的本地和全局命名空间应该是相同的命名空间,其中将对同一个函数的默认参数进行评估。

在类定义之前,放置一个伪定义:class Position(object):

pass

class Position(object):

...

这将摆脱,NameError甚至可能看起来不错:>>> Position.__add__.__annotations__

{'other': __main__.Position, 'return': __main__.Position}

但是吗?>>> for k, v in Position.__add__.__annotations__.items():

... print(k, 'is Position:', v is Position)

return is Position: False

other is Position: False

B. Monkey-patch为了添加注释:

你可能想尝试一些Python元编程魔术并编写一个装饰器来为类定义添加猴子补丁以添加注释:class Position:

...

def __add__(self, other):

return self.__class__(self.x + other.x, self.y + other.y)

装饰者应该对此负责:Position.__add__.__annotations__['return'] = Position

Position.__add__.__annotations__['other'] = Position

至少看起来是对的:>>> for k, v in Position.__add__.__annotations__.items():

... print(k, 'is Position:', v is Position)

return is Position: True

other is Position: True

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值