代码之家  ›  专栏  ›  技术社区  ›  Bartosz Radaczyński

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

  •  3
  • Bartosz Radaczyński  · 技术社区  · 16 年前

    我一直在研究一种非常简单的塔架积垢发生器。我想出了一些检查

    SomeClass._sa_class_manager.mapper.c
    

    是否可以检查此项(或调用以下划线开头的方法)?我一直认为这是合法的,尽管我不赞成,因为它严重依赖于类/对象的内部结构。但是,因为Python在Java意义上没有真正的接口,也许没问题。

    4 回复  |  直到 16 年前
        1
  •  8
  •   Swaroop C H    16 年前

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

        2
  •  8
  •   Brian    16 年前

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

        3
  •  0
  •   pi.    16 年前

    如果有效,为什么不呢?但是,当重新构造Sa_Class_Manager、将自己绑定到这个特定版本的sqlAlchemy或创建更多工作来跟踪更改时,您可能会遇到问题。由于SQLAlchemy是一个快速发展的目标,您可能已经在一年内到达那里。

    最好的方法是将所需的API集成到SQLAlchemy本身中。

        4
  •  0
  •   giltay    16 年前

    这通常不是一个好主意,因为已经提到了原因。然而,python故意允许这种行为,以防没有其他方法来做某些事情。

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