可以检查下划线开头的属性吗?
时间:2020-03-06 14:54:39 来源:igfitidea点击:
我一直在研究一种非常简单的塔架杂物产生器。我想出了一些可以检查的东西
SomeClass._sa_class_manager.mapper.c
可以检查一下(或者调用以下划线开头的方法)吗?我总是以为这是合法的,尽管对此不满意,因为它在很大程度上依赖于类/对象的内部结构。但是,嘿,因为python实际上并没有Java的接口,所以也许还可以。
解决方案
如果有效,为什么不呢?但是,当_sa_class_manager进行重组,将自己绑定到此特定版本的SQLAlchemy或者创建更多工作来跟踪更改时,我们可能会遇到问题。由于SQLAlchemy是一个快速发展的目标,因此我们可能已经在一年之内了。
最好的方法是将所需的API集成到SQLAlchemy本身。
故意(在Python中)没有"私有"范围。按照惯例,理想情况下,不应使用任何以下划线开头的内容,因此,如果其行为或者定义在下一版本中发生更改,则我们可能不会抱怨。
通常,这通常表明该方法实际上是内部方法,而不是已记录的接口的一部分,因此不应依赖该方法。该库的未来版本可以自由地重命名或者删除此类方法,因此,如果我们关心将来的兼容性而不必重写,请避免这样做。
由于已经提到的原因,通常这不是一个好主意。但是,如果没有其他方法可以做,Python会故意允许这种行为。
例如,如果我们有一个闭源编译的Python库,那么作者认为我们不需要直接访问某个对象的内部状态,但实际上,我们仍然可以获取所需的信息。在保持不同版本的情况下,我们遇到了相同的问题(如果我们很幸运,它仍然得到了维护),但是至少我们可以实际完成我们想做的事情。