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

的东西
SomeClass._sa_class_manager.mapper.c

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

有帮助吗?

解决方案

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

其他提示

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

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top