все Python 3astпонятие
ast.BitOr
операторы
Класс побитового оператора |: экземпляр BitOr() стоит в op узла BinOp или AugAssign. Им же выражено объединение множеств, словарей и типов int | None.
Синтаксис
ast.BitOr() # |
Аннотация int | None в дереве — обычный BinOp с BitOr, отдельного узла для объединения типов нет. А вот | в шаблоне case 1 | 2 — совсем другое: это MatchOr, и BinOp там не появляется. Логическое or — Or в BoolOp, а не BitOr.
Примеры
import ast
fn = ast.parse('def f(x: int | None): pass').body[0]
print(type(fn.args.args[0].annotation.op).__name__) # → BitOr
match = ast.parse('match v:\n case 1 | 2: pass').body[0]
print(type(match.cases[0].pattern).__name__) # → MatchOr
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности