我有一个类 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/