用于公共用途的Python私有方法

时间:2017-11-13 09:00:25

标签: python python-3.x private-members

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

但问题是我的包中还有另一个B类必须调用该方法_meth()。问题是我现在得到警告方法,说B试图访问类的受保护方法。因此,我必须公开该方法,即没有前导下划线。这与我的意图相矛盾。

解决这种困境的最神经方式是什么?

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

    < / LI>
  • 从单个元类继承不是一个选项,因为这些类具有完全不同的目的,并且会导致可怕的混乱。

1 个答案:

答案 0 :(得分:2)

pylint /你的编辑器/任何外部工具给你一个警告的事实并不妨碍代码执行。我不知道你的编辑器,但是pylint警告can be disabled on a case-by-case basis using special comments(nb:“case by case”的意思是:“不要警告我这个行或块”,而不是“完全禁用此功能”警告“)。

你自己的代码完全可以访问受保护的属性和方法在同一个包中 - “_protected”命名约定并不意味着“没有通过”,只是“你确定你了解你正在做什么,并且如果你破坏了什么就愿意承担责任?“由于您是软件包的作者/维护者,并且这些是软件包内访问,因此您显然有权承担此责任;)