1. 程式人生 > 其它 >Python入門基礎篇 No.74 —— 私有屬性和私有方法(實現封裝)

Python入門基礎篇 No.74 —— 私有屬性和私有方法(實現封裝)

技術標籤:# 基礎封裝python面向物件程式設計class

Python入門基礎篇 No.74 —— 私有屬性和私有方法(實現封裝)


文章目錄

前生篇:方法沒有過載_方法的動態性


前言

在這裡插入圖片描述


一、私有屬性和私有方法(實現封裝)

  • Python 對於類的成員沒有嚴格的訪問控制限制,這與其他面嚮物件語言有區別。關於私有屬性和私有方法,有如下要點:

1.通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public)。
2.類內部可以訪問私有屬性(方法)

3.類外部不能直接訪問私有屬性(方法)
4.類外部可以通過“_類名__私有屬性(方法)名”訪問私有屬性(方法)

  • 方法本質上也是屬性!只不過是可以通過()執行而已。所以,此處講的私有屬性和公有屬性,也同時講解了私有方法和公有方法的用法。如下測試中,同時也包含了私有方法和公有方法的例子。
  • 私有屬性和公有屬性使用測試:

程式碼演示:

# 測試私有屬性、私有方法
class Student:
    __school = 'university'  # 私有類屬性,通過dir可以查到_Student__school

    def __init__(self, name, age):
        self.
name = name self.__age = age # 私有例項屬性 def say_school(self): print("My school is ", Student.__school) # 類內部可以直接訪問私有屬性 print(self.name, "的年齡是:", self.__age) self.__work() def __work(self): # 私有例項方法,通過dir可以查到_Student__work print("好好學習!拿到大廠Offer!"
) p1 = Student('Offer', 21) print(p1.name) print(dir(p1)) p1.say_school() print(p1._Student__age) # 通過這種方法可以直接訪問到私有屬性。通過dir可以查到_Student__age # print(p1.__age) # 直接訪問私有屬性,報錯 # p1.__work() # 直接訪問私有方法,報錯 --------------------------------------- Offer ['_Student__age', '_Student__school', '_Student__work', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'name', 'say_school'] My school is university Offer 的年齡是: 21 好好學習!拿到大廠Offer! 21
  • 從列印的 Student 物件所有屬性我們可以看出。私有屬性“__age”在實際儲存時是按照“_Student__age”這個屬性來儲存的。這也就是為什麼我們不能直接使用“__age”而可以使用“_Student__age”的根本原因。

在這裡插入圖片描述


總結

以上幫各位總結好了,收藏,關注即可查收。

前生篇:方法沒有過載_方法的動態性


關注下方公眾號,免費拿Python學習資料!!!

在這裡插入圖片描述