Ответ 1
Из документации python:
Частное имя: когда идентификатор, который имеет текстовое значение в определении класса , начинается с двух или более символов подчеркивания и не заканчивается на два или более символа подчеркивания, это считается частным именем этого класса. Частные имена преобразуются в более длинную форму, прежде чем код будет создан для них. Преобразование вставляет имя класса перед именем, при этом удаляются ведущие подчеркивания, а перед именем класса добавляется одно подчеркивание. Например, идентификатор __ спама, встречающийся в классе с именем Ветвь, будет преобразован в _Ham__spam. Это преобразование не зависит от синтаксического контекста, в котором используется идентификатор. Если преобразованное имя чрезвычайно длинное (длиннее 255 символов), может быть реализовано определенное усечение. Если имя класса состоит только из символов подчеркивания, преобразование не выполняется.
Итак, ваш атрибут не назван __ test, но _BaseClass__test.
Однако вы не должны зависеть от этого, используйте self._test, и большинство разработчиков python будут знать, что этот атрибут является внутренней частью класса, а не публичным интерфейсом.