Можно ли проверять свойства, начинающиеся с подчеркивания?
-
02-07-2019 - |
Вопрос
Я работал над очень простым генератором грязи для пилонов.Я придумал кое-что, что проверяет
SomeClass._sa_class_manager.mapper.c
Можно ли это проверить (или вызвать методы, начинающиеся с подчеркивания)?Я всегда предполагал, что это законно, хотя и не одобрялся, поскольку это во многом зависит от внутренней структуры класса/объекта.Но эй, поскольку у Python на самом деле нет интерфейсов в смысле Java, возможно, все в порядке.
Решение
В Python намеренно отсутствуют «частные» области видимости.По соглашению, все, что начинается с подчеркивания, в идеале не должно использоваться, и, следовательно, вы не можете жаловаться, если его поведение или определение изменятся в следующей версии.
Другие советы
В общем, это обычно указывает на то, что метод фактически является внутренним, а не частью документированного интерфейса, и на него не следует полагаться.В будущих версиях библиотеки такие методы можно будет переименовывать или удалять, поэтому, если вы заботитесь о будущей совместимости без переписывания, избегайте этого.
Если это работает, почему бы и нет?Однако у вас могут возникнуть проблемы при реструктуризации _sa_class_manager, привязке себя к этой конкретной версии SQLAlchemy или создании дополнительной работы для отслеживания изменений.Поскольку SQLAlchemy — быстро меняющаяся цель, возможно, вы достигнете ее уже через год.
Предпочтительным способом было бы интегрировать желаемый API в сам SQLAlchemy.
Как правило, это не очень хорошая идея по уже упомянутым причинам.Однако Python намеренно допускает такое поведение, если нет другого способа сделать что-то.
Например, если у вас есть скомпилированная библиотека Python с закрытым исходным кодом, автор которой не думал, что вам понадобится прямой доступ к внутреннему состоянию определенного объекта (а это действительно так), вы все равно можете получить необходимую информацию.У вас есть те же проблемы, о которых говорилось выше, с необходимостью идти в ногу с разными версиями (если вам повезло, что они все еще поддерживаются), но, по крайней мере, вы действительно можете делать то, что хотели.