在python中,不像c#/java类语言,支持类的私有方法,这点有点像objc,虽然objc可以通过扩展extension来实现,但源于objc的运行时特性,我们还是可以通过非常手段来进行访问的。不过这点说白了,好像c#中也可以通过指定BindingFlags.NonPublic的方式结合反射来调用。
假设有如下一个python类:
1 class Securityp(object): 2 def __inaccessible(self): 3 print "Bet you can't see me..."
而s是Securityp的一个实例,我们
1 s.__inaccessible()
的情况下是会报错的,通过在一个方法前面加上两个下划线的方法来让一个方法成为私有方法。
那我们应该怎么来访问这个所谓的私有方法呢,
1 s._Securityp__inaccessible()
上述代码就可以让我来访问了。这是因为,在python的解析器中,所有以双下划线开头的方法都会被翻译成前面加上单下划线和类名的形式。
这样我们就可以访问类中私有方法了。