class ParentClass(object):
def __init__(self):
self.__x = 1
self.y = 10
def PRINT(self):
print (self.__x, self.y)
class ChildClass(ParentClass):
def __init__(self):
super(ChildClass, self).__init__()
self.__x = 2
self.y = 20
c = ChildClass()
c.PRINT()
为什么输出(1,20)?我知道我是如何得到20的,但是不是2而不是1?
只是为了扩大戳的答案...
形式为__spam的任何标识符(至少两个前导下划线,至多一个下划线)在文本上被_classname__spam替换,其中classname是当前类名,其中前导下划线被去除。只要不存在标识符的语法位置,就可以进行这种改写,只要它出现在类的定义内即可。
因此,如果我们将此行添加到代码的末尾:
print c._ChildClass__x, c._ParentClass__x,
它将打印
(1, 20)
2 1
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句