У меня есть объект ast.UnaryOp
, но я вручную добавил атрибут parent
(см. ответ). Как аннотировать это в функции?
У меня сейчас просто есть:
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
, у которого есть родительский атрибут. Я могу использовать это для приведения типов:
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