为什么要覆盖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
中,只出现了一种程序员无法访问的私有方法。
答案 0 :(得分:1)
在属性名称中使用两个前导下划线实现" name mangling" (除了内置"魔术方法")的前导和尾随双下划线的特殊情况之外,正如您所发现的那样意味着该属性只能在_classname__attrname
外部访问。
此名称修改使用专门来阻止对属性的访问。单个下划线不实现名称修改,并按照约定表示"私有" (即它可以访问,但礼貌不使用它!)
更好的问题可能是: