【问题标题】:is it okay to call a private static method outside the class [closed]可以在类外调用私有静态方法吗[关闭]
【发布时间】:2022-12-11 11:46:03
【问题描述】:

在python中,在类外调用私有静态方法可以吗?该类来自外部模块,因此我无法将其移出类,但该方法对我很有用。

class Vector:
    @staticmethod
    def _add(a,b):
        return a + b

# is it okay to do:
Vector._add(1,2)

“可以吗”,我指的是良好实践/PEP 指南。

【问题讨论】:

  • @TimRoberts - Python 确实有 Private variables,虽然不是 C++ 的意思。
  • 私有方法有几个问题。如果它使用 __ 双下划线完成,它的名称会与类名混淆,很难通过类继承获得 - 所以你已经减少了多态性。通常,它们不是公共 API 的一部分,实施者可以随意更改它们,恕不另行通知。如果你不介意风险,那就打电话。
  • 谢谢@tdelaney 的帮助。

标签: python oop


【解决方案1】:

一般来说,在没有适当方法隐私的语言中,例如 Python 和 Perl,方法名称中的下划线前缀表示该类的作者确实不是想让你调用那个方法。

这适用于类外、子类、相关类等。

例外情况是作者已明确记录(作为类的正式文档的一部分或在代码 cmet 中)该方法是受支持的 API 的一部分。作者可能希望使用下划线前缀命名支持的方法的原因可能包括:

  • 向后兼容不支持的旧版本;或者
  • 支持该方法是因为它对子类化很有用,但作者不希望它暴露给“普通用户”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-01
    • 2013-07-12
    • 2016-01-05
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    相关资源
    最近更新 更多