我知道要编写您使用的 python 模块私有(private)/ protected 函数
def _func():
...
但我有一个具有专门覆盖的对象层次结构。另外我想隐藏内部实现(因为它不适合外部使用,所以我希望可以在不破坏代码的情况下改进它,而不是我认为除了我之外任何人都会使用它)。如果我使用
class Paragraph(Tag):
def _method(self):
...
并尝试从一个不同的类调用 _method ,该类是 Tag IntelliJ IDEA 的子类(可能还有 pylint/其他检查器也会)给我一个警告。有没有什么办法解决这一问题?
我的用例是一组 Markdown 标记对象,用于生成类似“树”的结构,可以将其转换为正确的 Markdown 字符串。每个标签覆盖一个 protected 方法来转换它自己和它包含的标签,还有一些覆盖一个方法来检查子标签是否有效(例如没有嵌套的粗体)。只有顶级标签上下文有一个公共(public)方法来转换树。
编辑:
IntelliJ IDEA 警告:
访问类 _method 的 protected 成员
最佳答案
澄清:
“ protected ”只是一个约定,但语法检查器确实会在类层次结构之外访问它们。
'Private' 是通过名称修改实现的,因此该元素只能在定义它的类中使用。两个下划线替换为
_<name of class>__
。有一些技巧可以绕过这个......也就是说,你得到的警告是什么?在下面的示例中,pylint 不会警告我在 Test 类中使用 _func,但我在最后一行收到警告 (W0212)。您是否忘记在基类中定义 protected 函数?
class Test(object):
''' . '''
def _func(self):
''' . '''
raise NotImplementedError()
def fun(self):
''' . '''
self._func()
class Demo(Test):
''' . '''
def _func(self):
''' . '''
print 'Hi'
t = Demo()
t._func()
关于python - 如何在 python 中编写模块私有(private)/ protected 方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23151400/