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

5 投票
4 回答
509 浏览
提问于 2025-04-11 09:26

我一直在为pylons开发一个非常简单的增删改查生成器。我想出了一个可以检查的东西

SomeClass._sa_class_manager.mapper.c

检查这个(或者调用以底线开头的方法)可以吗?我一直觉得这样做是合法的,虽然可能不太被推荐,因为这很依赖于一个类或对象的内部结构。不过,既然Python并没有像Java那样的接口,也许这样做是可以的。

4 个回答

0

如果这个方法有效,那为什么不呢?不过,你可能会遇到一些问题,比如当 _sa_class_manager 结构发生变化时,你就会被绑定到这个特定版本的 SQLAlchemy 上,或者需要花更多的精力去跟踪这些变化。因为 SQLAlchemy 更新得很快,可能一年后你就会面临这些问题。

更好的办法是把你想要的功能直接整合进 SQLAlchemy 里。

9

一般来说,这通常意味着这个方法实际上是内部使用的,而不是官方文档中提到的接口的一部分,所以不应该依赖它。未来的库版本可以随意更改这个方法的名字或者直接删除它,因此如果你想要确保将来使用时不需要重写代码,就最好不要使用这些方法。

9

在Python中,没有“私有”作用域是故意的设计。一般来说,任何以下划线开头的东西最好不要去使用,因此如果它在下一个版本中行为或定义发生变化,你也不能抱怨。

撰写回答