Я пишу проект, который дает советы по поводу имен переменных, и я хочу, чтобы он сообщал, соответствует ли имя любому из зарезервированных классов идентификаторов . Первый ("частный") довольно прост, просто name.startswith('_')
, но имена dunder и class-private более сложны. Есть ли встроенная функция, которая может мне сказать? Если нет, то какие внутренние правила использует Python?
Для dunder проверка name.startswith('__') and name.endswith('__')
не работает, потому что, например, это будет соответствовать '__'
. Может быть, регулярное выражение, например ^__\w+__$
, будет работать?
Для закрытого класса name.startswith('__')
не работает, потому что имена dunder не искажены, а также имена с просто подчеркиванием, например '___'
. Поэтому мне кажется, что мне нужно проверить, начинается ли имя с двух знаков подчеркивания, не заканчивается ли двумя знаками подчеркивания и содержит ли хотя бы один символ без подчеркивания. Это правильно? В коде:
name.startswith('__') and not name.endswith('__') and any(c != '_' for c in name)
Меня больше беспокоят крайние случаи, поэтому я хочу убедиться, что правила на 100% верны. Я прочитал Что означают одинарное и двойное подчеркивание перед именем объекта? , но деталей недостаточно.