我明白要编写python模块私有/受保护的函数,你可以使用
def _func():
...
但我有一个具有专门覆盖的对象层次结构。另外我想隐藏内部实现(因为它不适合外部使用,因此我希望能够在不破坏代码的情况下改进它,而不是我认为除了我之外任何人都会使用它)。如果我使用
class Paragraph(Tag):
def _method(self):
...
并尝试从另一个类中调用_method,该类继承Tag IntelliJ IDEA(可能还有pylint /其他检查器)也会给我一个警告。有什么方法可以解决这个问题吗?
我的用例是一组markdown标记对象,用于生成类似“Tree”的结构,可以将其转换为正确的markdown字符串。每个标记都会覆盖一个受保护的方法来转换自身及其包含的标记,并且一些标记会覆盖一个检查子标记是否有效的方法(例如没有嵌套的粗体)。只有顶级标记上下文有一个公共方法来转换树。
编辑:
IntelliJ IDEA警告:
访问类_method
的受保护成员答案 0 :(得分:5)
澄清:
'受保护'只是一种约定,但是语法检查器在类层次结构之外访问它们时会唠叨。
'Private'是通过名称修改来实现的,因此该元素只能在定义它的类中使用。这两个下划线替换为_<name of class>__
。有一些技巧可以规避这个......
那说,你得到的警告是什么?在下面的示例中,pylint不会警告我在Test类中使用_func,但我在最后一行收到警告(W0212)。您是否忘记在基类中定义受保护的函数?
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()