在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的解析器中,所有以雙下划線開頭的方法都會被翻譯成前面加上單下划線和類名的形式。
這樣我們就可以訪問類中私有方法了。