首頁 > 後端開發 > Python教學 > Python 的「私有」方法到底有多私有?

Python 的「私有」方法到底有多私有?

Barbara Streisand
發布: 2024-12-11 12:15:11
原創
587 人瀏覽過

How Private Are Python's

Python 的「私有」方法:不像看起來那麼難以理解

儘管人們誤以為Python 的「私有」方法提供了強大的封裝性,但仔細檢查就會發現它們並不是真正的私有。雖然在方法前面加入雙底線 (__myPrivateMethod()) 表示私有作用域,但它實際上建立了一個具有修改名稱的方法。

例如,以下類別示範了此行為:

class MyClass:
    def myPublicMethod(self):
        print('public method')

    def __myPrivateMethod(self):
        print('this is private!!')
登入後複製

當實例化此類別的物件時,人們會期望無法存取私有的方法:

obj = MyClass()
obj.myPublicMethod()
登入後複製

但是,後續的dir(obj)呼叫揭示了一個神奇創建的方法的存在:

dir(obj)
['_MyClass__myPrivateMethod', '__doc__', '__module__', 'myPublicMethod']
登入後複製

呼叫此方法揭示了「私有」資料:

obj._MyClass__myPrivateMethod()
登入後複製

此命名約定用於防止子類別無意中覆蓋其超類別的私有方法和屬性。不過,並不妨礙外界有意的訪問。

例如:

class Foo(object):
    def __init__(self):
        self.__baz = 42

    def foo(self):
        print(self.__baz)

class Bar(Foo):
    def __init__(self):
        super(Bar, self).__init__()
        self.__baz = 21

    def bar(self):
        print(self.__baz)

x = Bar()
x.foo()  # 42
x.bar()  # 21
print(x.__dict__)  # {'_Bar__baz': 21, '_Foo__baz': 42}
登入後複製

綜上所述,Python 的「私有」方法並不是真正私有的,允許子類別存取它們。這種設計選擇優先考慮子類化的靈活性而不是嚴格的封裝,但它也需要開發人員謹慎使用以維護程式碼完整性。

以上是Python 的「私有」方法到底有多私有?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板