Можно ли проверять свойства, начинающиеся с подчеркивания?

StackOverflow https://stackoverflow.com/questions/152068

  •  02-07-2019
  •  | 
  •  

Вопрос

Я работал над очень простым генератором грязи для пилонов.Я придумал кое-что, что проверяет

SomeClass._sa_class_manager.mapper.c

Можно ли это проверить (или вызвать методы, начинающиеся с подчеркивания)?Я всегда предполагал, что это законно, хотя и не одобрялся, поскольку это во многом зависит от внутренней структуры класса/объекта.Но эй, поскольку у Python на самом деле нет интерфейсов в смысле Java, возможно, все в порядке.

Это было полезно?

Решение

В Python намеренно отсутствуют «частные» области видимости.По соглашению, все, что начинается с подчеркивания, в идеале не должно использоваться, и, следовательно, вы не можете жаловаться, если его поведение или определение изменятся в следующей версии.

Другие советы

В общем, это обычно указывает на то, что метод фактически является внутренним, а не частью документированного интерфейса, и на него не следует полагаться.В будущих версиях библиотеки такие методы можно будет переименовывать или удалять, поэтому, если вы заботитесь о будущей совместимости без переписывания, избегайте этого.

Если это работает, почему бы и нет?Однако у вас могут возникнуть проблемы при реструктуризации _sa_class_manager, привязке себя к этой конкретной версии SQLAlchemy или создании дополнительной работы для отслеживания изменений.Поскольку SQLAlchemy — быстро меняющаяся цель, возможно, вы достигнете ее уже через год.

Предпочтительным способом было бы интегрировать желаемый API в сам SQLAlchemy.

Как правило, это не очень хорошая идея по уже упомянутым причинам.Однако Python намеренно допускает такое поведение, если нет другого способа сделать что-то.

Например, если у вас есть скомпилированная библиотека Python с закрытым исходным кодом, автор которой не думал, что вам понадобится прямой доступ к внутреннему состоянию определенного объекта (а это действительно так), вы все равно можете получить необходимую информацию.У вас есть те же проблемы, о которых говорилось выше, с необходимостью идти в ногу с разными версиями (если вам повезло, что они все еще поддерживаются), но, по крайней мере, вы действительно можете делать то, что хотели.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top