VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Python3中_和__的用途和区别(2)

输出结果:

1
2
This is a method from class TestA
This is a method from class TestA

在类TestA中,__method方法其实由于name mangling技术的原因,自动转换成了_TestA__method,所以在A中method方法返回的是_TestA__method,TestB作为TestA的子类,只重写了__method方法,并没有重写method方法,所以调用B中的method方法时,调用的还是_TestA__method方法。

注意:在A中没有__method方法,有的只是_A__method方法,也可以在外面直接调用,所以python中没有真正的私有化

不能直接调用__method()方法, 需要调用转换之后的方法

1
ca.__method()

输出:

1
2
Traceback (most recent call last):
  File "", line 1in AttributeError: 'TestA' object has no attribute '__method'

转换后的方法名为:_TestA__method

1
ca._TestA__method()

输出:

1
This is a method from class TestA

 

在TestB中重写method方法:

1
2
3
4
5
6
7
class TestB(TestA):
    def __method(self):
        print('This is a method from calss TestB')
    def method(self):
        return self.__method()
cb = B()
cb.method()

输出:

1
This is a method from calss TestB

现在TestB中的method方法会调用_TestB__method方法:

总结

python中没有真正的私有化,但是有一些和命名有关的约定,来让编程人员处理一些需要私有化的情况。


相关教程