2008-09-30 111 views
3

我一直在研究一个非常简单的塔式发电机。我想出了一些检查检查以下划线开头的属性可以吗?

SomeClass._sa_class_manager.mapper.c 

它是确定检查这种(或叫用下划线begining方法)?我总是认为这是合法的,尽管它严重依赖于类/对象的内部结构。但是,嘿,因为python在Java中并没有真正的接口,所以它可以。

回答

8

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

0

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

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

8

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

0

这通常不是一个好主意,因为已经提到的原因。但是,如果没有其他方式做某事,Python会故意允许这种行为。例如,如果您有一个封闭源代码编译的Python库,其中作者认为您不需要直接访问某个对象的内部状态—,但您确实可以执行—,那么仍然可以获取有关您的信息需要。你遇到与之前提到的相同的问题,以跟上不同的版本(如果你足够幸运,它仍然保持),但至少你可以做你想做的事情。

相关问题