在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 个回答
2
在属性名称前面加两个下划线会实现“名称改编”,这意味着这个属性只能通过 _classname__attrname
这种方式在外部访问(除了内置的“魔法方法”这种特殊情况,它们前后都有双下划线)。
这种名称改编的主要目的是为了防止外部访问这个属性。一个下划线并不会进行名称改编,它只是表示“按照约定是私有的”(也就是说,虽然可以访问,但最好不要用!)
一个更好的问题可能是:
- 你为什么想访问双下划线的方法?或者
- 如果你想让它们可以被访问,为什么要这样命名呢?