中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python訪問限制是什么

發布時間:2020-11-09 10:49:10 來源:億速云 閱讀:133 作者:小新 欄目:編程語言

小編給大家分享一下python訪問限制是什么,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

說到訪問控制,python小白可能會很陌生。那就舉一個簡單的例子,我們住的房子是私有物,而外面的公共設施是公有物。這樣是不是好理解一點了呢?

訪問控制有三種級別:私有、受保護、公有

私有(Private):只有類自身可以訪問

受保護(Protected):只有類自身和子類可以訪問

公有(Public):任何類都可以訪問

一、公有(Public)

Python的類中,默認情況下定義的屬性都是公有的。

class Foo(object):
    bar = 123
 
    def __init__(self, bob):
        self.bob = bob
 
print(Foo.bar)  # 123
 
foo = Foo(456)
print(foo.bob)  # 456

上面類Foo中的bar屬性就是類屬性,init方法中定義的bob是實例屬性,bar和bob都是公有的屬性,外部可以訪問,分別print類中的bar和實例中的bob,輸出了對應的值。

二、受保護(Protected)

Python中定義一個受保護的屬性,只需要在其名字前加一個下劃線_,我們將Foo方法中的bob和bar改為_bob和_bar,他們就變成了受保護的屬性了,代碼如下:

class Foo(object):
    _bar = 123
 
    def __init__(self, bob):
        self._bob = bob
 
 
class Son(Foo):
 
    def print_bob(self):
        print(self._bob)
 
    @classmethod
    def print_bar(cls):
        print(cls._bar)
 
 
Son.print_bar()  # 123
 
son = Son(456)
son.print_bob()  # 456

定義一個類Son繼承自Foo,由于受保護的對象只能在類的內部和子類中被訪問,不能直接調用print(Son._bar)或print(son._bob)來輸出這兩個屬性的值,所以定義了print_bar和print_bob方法,實現在子類中輸出,這段代碼也正常的輸出了_bar和_bob的值。

接下來,試著反向驗證一下,在類的外部,能不能訪問其屬性,將上面代碼的輸出部分修改如下:

print(Son._bar)  # 123
 
son = Son(456)
print(son._bob)  # 456

(假裝)驚訝的發現,竟然沒有報錯,也輸出了正確的值。

Python中用加下劃線來定義受保護變量,是一種約定的規范,而不是語言層面真的實現了訪問控制,所以,我們定義的保護變量,依然可以在外部被訪問到(這是個feature,不是bug)。

 

三、私有(private)

Python定義私有屬性,需要在屬性名前加兩個下劃線__,把上面的代碼修改一下,運行一下會發現下面的代碼中的任何一個print都會報錯的。

class Foo(object):
    __bar = 123
 
    def __init__(self, bob):
        self.__bob = bob
 
 
class Son(Foo):
 
    def print_bob(self):
        print(self.__bob)  # Error
 
    @classmethod
    def print_bar(cls):
        print(cls.__bar)  # Error
 
 
print(Son.__bar)  # Error
 
son = Son(456)
print(son._bob)  # Error

以上是python訪問限制是什么的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌恰县| 顺昌县| 洞头县| 盱眙县| 策勒县| 乳源| 武宣县| 延安市| 安西县| 铜梁县| 北宁市| 乌苏市| 安阳县| 托克逊县| 五家渠市| 麻栗坡县| 六安市| 库尔勒市| 望奎县| 巫溪县| 达孜县| 富裕县| 龙南县| 大邑县| 赤水市| 元阳县| 共和县| 丁青县| 体育| 偃师市| 汕头市| 连州市| 宁乡县| 肇东市| 林西县| 屯门区| 中山市| 旌德县| 和平区| 郯城县| 尼木县|