Python私有(private)方法供公共(public)使用

标签 python python-3.x private-members

我有一个类 A 需要实现方法 meth()。 现在,我不希望我的包的最终用户调用此方法。因此,我必须将此方法设为私有(private)(即 _meth()。我知道它不是真正的私有(private),但约定很重要。)

问题是我的包中还有另一个 B 类,它必须调用该方法 _meth()。问题是我现在收到警告方法,说 B 尝试访问类的 protected 方法。因此,我必须公开该方法,即没有前导下划线。这违背了我的初衷。

解决这个困境最Pythonic的方法是什么?


  • 我知道我可以在 A 之外重新实现该方法,但这会导致代码重复,并且由于 meth() 使用 A 的私有(private)属性,因此会导致相同的问题。

  • 从单个元类继承不是一种选择,因为这些类具有完全不同的目的,这将导致可怕的困惑。

最佳答案

pylint/您的编辑器/任何外部工具向您发出警告的事实并不会阻止代码执行。我不知道你的编辑器怎么样,但 pylint 警告 can be disabled on a case-by-case basis using special comments (注意:“具体情况”的意思是:“不要针对此行或 block 警告我”,而不是“完全禁用此警告”)。

您自己的代码完全可以在同一个包中访问 protected 属性和方法 - “_protected”命名约定并不意味着“没有人会通过”,只是“您确定吗?”明白你在做什么并愿意在破坏某些东西时承担责任吗?”。由于您是包的作者/维护者,并且这些是包内访问权限,因此您显然有权承担此责任;)

关于Python私有(private)方法供公共(public)使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47260380/

相关文章:

python - 在 Python 3.2 上返回 True 时出现“语法错误”

python - Bash/Python 将多个路径收集到一个并将文件名替换为 '*' 字符

python - django.db.utils.operationalError : (2059 ,"Authentication Plugin ' caching_sha2_password'")

c++ - 派生类如何使用基类的 protected 成员?

c# - 修改private readonly成员变量?

php - 如何从我的网站获取计算机上文件的内容?

python - Python 线程中 join() 的用途是什么?

python - 来自 archive.ics 的 "Adult data set"(数据集)上的 ML...使用 KNeighborsClassifier 将无法运行

python - 如何循环遍历多个sklearn分类模型?

c++ - 访问同一类对象的私有(private)元素