可以检查以下划线开头的属性吗?

时间:2008-09-30 07:24:26

标签: python sqlalchemy pylons

我一直在研究一种非常简单的用于挂架的crud发电机。我想出了一些检查

的东西
SomeClass._sa_class_manager.mapper.c

检查这个(或调用以下划线开头的方法)是否可以?我总是认为这是合法的虽然不赞成,因为它严重依赖于类/对象的内部结构。但是,嘿,因为python在Java意义上没有真正的接口,也许没关系。

4 个答案:

答案 0 :(得分:8)

有意(在Python中)没有“私有”范围。一个惯例是,任何以下划线开头的东西都不应该被理想地使用,因此如果它的行为或定义在下一个版本中发生变化,你可能不会抱怨。

答案 1 :(得分:8)

通常,这通常表示该方法实际上是内部的,而不是文档化界面的一部分,不应该依赖。该库的未来版本可以自由重命名或删除此类方法,因此如果您关心未来的兼容性而不必重写,请避免这样做。

答案 2 :(得分:0)

如果有效,为什么不呢?但是,当_sa_class_manager重新构造,将自己绑定到此特定版本的SQLAlchemy或创建更多工作来跟踪更改时,您可能会遇到问题。由于SQLAlchemy是一个快速移动的目标,你可能已经在一年内出现了。

最好的方法是将您想要的API集成到SQLAlchemy本身。

答案 3 :(得分:0)

由于已经提到的原因,这通常不是一个好主意。但是,如果没有其他方法可以做到,Python会故意允许这种行为。

例如,如果您有一个闭源编译的Python库,作者认为您不需要直接访问某个对象的内部状态 - 但您确实这样做 - 您仍然可以获得所需的信息。你在跟上不同的版本之前遇到了同样的问题(如果你很幸运,它仍然保持不变),但至少你可以做你想做的事。