激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日日摸夜夜添夜夜添牛牛 | 久久精品一区二区三区不卡牛牛 | 成人久久 | 国产精品999在线观看 | 美女在线观看视频一区二区 | 国产精品一区网站 | 最新中文字幕日本 | 高清国产免费 | 国产毛片毛片毛片 | 久久网站免费 | 哪里可以看免费的av | 欧美日韩大片在线观看 | 性欧美极品xxxx欧美一区二区 | 曰韩一二三区 | 国产精品视频一区二区三区综合 | 欧美一级做a| 国产免费久久久久 | 国产一级毛片国语版 | 免费黄色一级网站 | 日本久久精 | 一级欧美日韩 | 国产免费高清 | 免费黄色在线电影 | 欧美日韩高清一区二区三区 | 成人免费一区二区三区视频网站 | av在线免费在线观看 | 特级毛片免费视频 | 91在线视频精品 | 中午字幕无线码一区2020 | 一级毛片高清 | 激情久久婷婷 | 亚洲一区二区免费视频 | 久章草在线视频 | av在线免费不卡 | 毛片在线免费 | 黄色特级片黄色特级片 | 国产精品啪一品二区三区粉嫩 | 国产69精品久久99不卡免费版 | 国产成人精品一区二区仙踪林 | 国产免费让你躁在线视频 | 在线看成人av|