返回介绍

工具类的命名考虑

发布于 2024-01-29 22:24:15 字数 766 浏览 0 评论 0 收藏 0

这里最后需要考虑一点:由于classtools模块中的AttrDisplay类旨在和其他任意类混合的通用性工具,所以我们必须注意与客户类潜在的无意的命名冲突。为此,我们必须假设客户子类可能想要使用其__str__和gatherAttrs,但是,后者可能比一个子类的期待还要多——如果一个子类无意地自己定义了一个gatherAttrs名称,它很可能会破坏我们的类,因为可能会使用子类中的这个低版本而不是我们的版本。

要自己看看效果,在文件的self测试代码中为TopTest添加一个gatherAttrs,除非新的方法是相同的,或者有意定制了最初的方法,我们的工具类将不再像计划的那样工作:

这不一定是坏事,有时候,我们希望其他的方法可供子类使用,要么直接调用,要么定制。如果我们真的只想提供一个__str__,这还不够理想。

为了减少像这样的名称冲突的机会,Python程序员常常对于不想做其他用途的方法添加一个单个下划线的前缀:在我们的例子中就是_gatherAttrs。这不是很可靠(如果另一个也定义了_gatherAttrs,该如何是好?),但是,它通常已经够用了,并且对于类内部的方法,这是常用的Python命名惯例。

一种更好的但不太常用的方法是,只在方法名前面使用两个下划线符号:对我们的例子来说就是__gatherAttrs。Python自动扩展这样的名称,以包含类的名称,从而使它们变得真正唯一。这一功能通常叫做伪私有类属性,我们将在第30章展开讨论。现在,我们将两种方法都用到。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文