2008-09-30 3 views
3

Я работал над очень простым генератором crud для пилонов. Я придумал что-то, что инспектируетМожно ли проверить свойства, начинающиеся с подчеркивания?

SomeClass._sa_class_manager.mapper.c 

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

ответ

8

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

0

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

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

8

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

0

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

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

Смежные вопросы