PyCharm中的覆盖方法

时间:2014-03-18 15:01:11

标签: python methods override pycharm

为什么要覆盖PyCharm中的方法而不知道如何访问它们?例如:

class A ( object):
    def __init__ (self, i = 1):
        self.i = i

    def __f1_a (self):
        return ( self.i )


class B (A) :
    def __init__ (self, j = 2):
        super () . __init__ ()
        self.j = 0

    def __f1_a (self):
        return ( self.j )


class C ( B):
    def __init__ (self, c = 100):
        self.c = c

为什么在B类中,PyCharm没有告诉我们如何访问这两种方法__f1_a(self)?在尝试访问类B的对象的方法时,它们不会出现,但我们可以通过以下方式(假设b是类B的实例):

b._A__f1_a( )

b._B__f1_a( )

两个表达都是正确的。为什么不告诉我们PyCharm呢?我们应该知道吗?在我看来,它们会更清楚地出现在每一类方法中,这些方法可以按照我们必须编写的方式进行访问。为什么不去那个PyCharm?相反,在类B中,只出现了一种程序员无法访问的私有方法。

1 个答案:

答案 0 :(得分:1)

在属性名称中使用两个前导下划线实现" name mangling" (除了内置"魔术方法")的前导和尾随双下划线的特殊情况之外,正如您所发现的那样意味着该属性只能在_classname__attrname外部访问。

此名称修改使用专门来阻止对属性的访问。单个下划线不实现名称修改,并按照约定表示"私有" (即它可以访问,但礼貌不使用它!)

更好的问题可能是:

  1. 您为什么要尝试访问双下划线方法;或
  2. 如果您希望能够访问它们,为什么要将它们命名为?