国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文字幕中文字幕 | 亚洲一区 | 91精品国产91久久久久久吃药 | 久久精品免费观看 | 久一久久 | 成人精品一区二区三区中文字幕 | 久久久久久久免费观看 | 污视频免费 | 永久免费av| 福利国产 | 国产嫩草91 | 国产日韩欧美 | 久久久久久国产免费 | 九九香蕉视频 | 操网| 日韩精品一区二区三区中文字幕 | 久久久久久久久久久久免费 | 亚洲高清毛片一区二区 | 国产在线观看91一区二区三区 | 成人精品一区亚洲午夜久久久 | 午夜影院 | 成人免费视频观看 | 黄色免费在线网站 | 国产成人精品亚洲日本在线观看 | 黄色在线观看视频 | 亚洲电影在线 | 一区在线播放 | 99精品99| 91久久精品日日躁夜夜躁国产 | 日韩精品一区二区在线视频 | 亚洲福利在线观看 | 国产资源视频在线观看 | 亚洲精品久 | 国产精品高清在线观看 | 亚洲精品国产9999久久久久 | 久草免费在线视频 | 国产午夜精品一区二区三区免费 | 久久精品亚洲 | 日韩欧美一区二区三 | 国产1页| 亚洲一级毛片 |