一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python面向對象編程之類的封裝

Python面向對象編程之類的封裝

2022-02-22 00:19一碗周 Python

這篇文章主要介紹了Python面向對象編程之類的封裝封裝指屬性和方法的抽象,屬性的抽象又指對類的屬性進行定義、隔離和保護,下面來看看文章的具體內容吧,需要的朋友可以參考一下,希望對你有所幫助

1、封裝的理解

封裝(Encapsulation):屬性和方法的抽象

屬性的抽象:對類的屬性(變量)進行定義、隔離和保護

分為私有屬性和公開屬性

  • 私有屬性:只能在類內部訪問
  • 公開屬性:可以通過類、對象名訪問

可以選擇公開或隱藏屬性,隱藏屬性的內在機理

方法的抽象:對類的方法(函數)進行定義、隔離和保護

分為私有方法和公開方法:

  • 私有方法:只能在類內部訪問
  • 公開方法:可以通過類、對象名訪問

可以選擇公開或隱藏方法,隱藏方法的內部邏輯

  • 目標是形成一個對外可操作屬性和方法的接口

封裝就是讓數據和代碼稱為類的過程,表達為:類——屬性——方法

2、私有類屬性、公開類屬性、私有實例屬性和公開實例屬性

2.1 公開類屬性

公開類屬性就是類屬性,語法結構

?
1
2
3
4
5
class ClassName:
    <類屬性名> = <類屬性初值>
    def __init__(self,[參數1], [參數2], ...[參數n]):
        self.<實例屬性名> = <實例屬性初值>
    ...

2.2 私有類屬性

私有類屬性只能當前類進行訪問,子類不能訪問。語法結構

?
1
2
3
4
5
class ClassName:
    <__私有類屬性名> = <私有類屬性初值>
    def __init__(self,[參數1], [參數2], ...[參數n]):
        self.<實例屬性名> = <實例屬性初值>
    ...

.<類屬性>或者<對象名>.<類屬性>的方式訪問

有效保證了屬性維護的可控性

示例代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TestClass:
    __number = 0
 
    def __init__(self, num_value):
        for i in range(num_value + 1):
            TestClass.__number += i
 
    @classmethod  # 類方法
    def sum_number(cls):
        return TestClass.__number
 
 
value1 = TestClass(100)
print(TestClass.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

在類外賣訪問.__number就會報出AttributeError異常

2.3 公開實例屬性

公開實例屬性就等于示例屬性,語法結構

?
1
2
3
4
5
class <類名>:
    <類屬性名> = <類方法值>
    def __init__(self, <參數列表>):
        self.<實例屬性名> = <實例屬性值>
    ...

2.4 私有實例屬性

私有實例屬性只能在當前類內部使用,子類也不能使用。語法結構

?
1
2
3
4
5
class <類名>:
    <類屬性名> = <類方法值>
    def __init__(self, <參數列表>):
        self.<__私有實例屬性名> = <實例屬性值>
    ...

.<類屬性>或者<對象名>.<類屬性>的方式訪問

有效保證了屬性維護的可控性

示例代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class TestClass:
 
    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i
 
    def sum_number(self):
        return self.__number
 
 
value1 = TestClass(100)
print(value1.sum_number())  # 5050
# print(value1.__number)  # AttributeError: 'TestClass' object has no attribute '__number'

2.5 私有屬性不一定真的私有

私有屬性的雙下劃線只是一種轉換約定,轉換后,類內原有名字發生了變化,這是一種形式上的私有

示例代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class TestClass:
 
    def __init__(self, num_value):
        self.__number = 0
        for i in range(num_value + 1):
            self.__number += i
 
    def sum_number(self):
        return self.__number
 
 
value1 = TestClass(100)
print(value1.sum_number())  # 5050
print(value1._TestClass__number)  # 5050
# 可以通過 對象名._類名__屬性 的方式來訪問

可以通過對象名._類名__屬性的方式來訪問。

3、私有方法和公開方法

定義方法是在類內部定義并使用的方法。語法結構

?
1
2
3
class <類名>:
    def <__私有方法名>(self, <參數列表>):
        ...

私有方法定義的時候屬性名字前面需要兩個下劃線( __ ).

各類方法都可以通過增加雙下換線的方式將方法變為私有方法

私有方法在形式上保護了Python類內部使用的函數邏輯

私有屬性與公開是程序員邏輯,不是安全邏輯,重視約定

4、類的保留屬性

Python解釋器預留的類屬性,以雙下換線開頭或者結尾。

  • 保留屬性也叫特殊屬性
  • 以雙下劃線開頭和結尾
  • 作用是為理解Python類提供了統一的屬性接口
  • 屬性值具有特殊的含義,類定義后直接使用

僅用<類名>訪問的保留屬性

 

保留屬性 描述
__name__ 類的名詞
__qualname__ 以.分隔從模板全局命名空間開始的類名稱
__bases__ 類所繼承的基類名稱

 

5、類的保留方法

保留方法是Python解釋器預留的方法,以雙下劃線開頭和結尾

  • 保留方法也叫特殊方法
  • 以雙下劃線開頭和結尾
  • 作用是為理解Python類提供了統一的方法接口
  • 方法邏輯:具有特定的含義,一般與操作符關聯,類定義需要重載

到此這篇關于Python面向對象編程之類的封裝的文章就介紹到這了,更多相關Python類的封裝內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7023378125027278856

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91视频破解| 草莓视频深夜释放 | 日本漫画工囗全彩番在线 | 亚洲欧美日本在线观看 | 农夫69小说小雨与农村老太 | 1769在线观看| 耽美肉文高h | 午夜特级毛片 | 青青色在线观看 | 免费观看日本视频 | 国产情侣自拍网 | 国产精品国语自产拍在线观看 | 午夜精品久久久久久中宇 | 日本69sex护士www | 厨房里摸着乳丰满在线观看 | 视频亚洲一区 | 国产精品香蕉一区二区三区 | 99精品国产综合久久久久 | 日本免费在线观看 | 欧美成人中文字幕 | 公园暴露娇妻小说 | t66y地址一地址二地址三 | www.四虎.com | 四虎影院在线免费观看视频 | 欧美日韩国产一区二区三区不卡 | 久久性生大片免费观看性 | 国产小视频在线 | 亚洲人的天堂男人爽爽爽 | 色综合天天综合网站中国 | 亚洲阿v天堂在线2017 | japonensis日本护士18 | 色交视频| darkside动漫在线观看 | 高h短篇校园1v1 | asianfemdom冷柔女王 | 黑人巨大vs北条麻妃在线 | 黑人好大好硬好深好爽想要h | 欧美亚洲天堂网 | 精品国偷自产在线 | 456亚洲老头视频 | 强行扒开美女大腿挺进 |