Sean's Note: 11月 2013

2013年11月20日 星期三

[Python] 前綴字 _ 和 __ 的差別

一個底線 _

def _getName(self):
    ...

name = property(_getName)

代表 _getName 是 private function,不應該被外部呼叫,常常應用於 property 中

,然而在 Python 中,並沒有真的 private function,所以應該說是撰寫上的慣例。

兩個底線 __

class A():

    def __getName(self):
        ....

a = A()
a.__getName # Wrong!!
a._A__getName # OK, but not doing this!

代表 __getName 不允許被 override,而且也不能被外部呼叫。

Python 的實作方式其實就是在方法前加上類別名稱 -> _A__getName。

Ref: http://igorsobreira.com/2010/09/16/difference-between-one-underline-and-two-underlines-in-python.html