【发布时间】:2021-01-04 07:48:53
【问题描述】:
我有一个ast.UnaryOp 对象,但我手动添加了一个parent 属性(请参阅answer)。如何在函数中对此进行注释?
我目前只有:
def _get_sim206(node: ast.UnaryOp):
if isinstance(node.parent, ast.If):
return False
return True
但是 mypy 抱怨(理所当然地)ast.UnaryOp 没有 parent 属性。
如何告诉 mypy node 不是 ast.UnaryOp 而是 ast.UnaryOp + parent attribute?
我的尝试
我创建了自己的 UnaryOp 类,它有一个 parent 属性。我可以将它用于类型转换:
class UnaryOp(ast.UnaryOp):
def __init__(self, orig: ast.UnaryOp) -> None:
self.op = orig.op
self.operand = orig.operand
self.lineno = orig.lineno
self.col_offset = orig.col_offset
self.parent: ast.Expr = orig.parent # type: ignore
它的缺点是我需要在很多地方进行类型转换,并且我引入了Any。如果我可以在某处声明该文件中的所有ast.* 类型确实具有parent 属性,我会更愿意
【问题讨论】:
标签: python mypy type-annotation