国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 腳本之家 - Python - Python面向對象程序設計中類的定義、實例化、封裝及私有變量/方法詳解

Python面向對象程序設計中類的定義、實例化、封裝及私有變量/方法詳解

2021-06-03 00:27-牧野- Python

這篇文章主要介紹了Python面向對象程序設計中類的定義、實例化、封裝及私有變量/方法,結合具體實例形式較為詳細的分析了Python面向對象程序設計中類的定義、實例化、封裝、私有變量、私有方法等相關使用技巧,需要的朋友可以

本文實例講述了Python面向對象程序設計中類的定義、實例化、封裝及私有變量/方法。分享給大家供大家參考,具體如下:

1. 定義類

python中定義一個類的格式如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def __func1(self):
    print("MyClass類的私有方法被調用!")
  def print_data(self):
    self.__func1()
    print(self.__data1)
    print(self.data2)
  def setData(self,data):
    self.__data1=data
class1=MyClass('first_data','sencond_data')
class1.print_data()
class1._MyClass__func1()

類通過關鍵字 class 引導,后跟類的名稱,通常第一個字母大寫,類名稱MyClass后的括號內的object表示該類的父類,如果定義的類沒有顯明從哪個類繼承來的,就在括號內使用object,object類是所有類的父類。

__init__是定義的類的構造函數,可以對類的變量進行初始化,每當該類被實例化的時候,就會先執行該構造函數。

在類中定義的函數的一個參數一定要是self,代表類當前的實例化對象,但在調用時,不需要傳遞這個參數。

2. 類的實例

類的實例化方法如下:

?
1
obj=MyClass(x,x)

obj是類的實例化對象,MyClass是類名,括號內的變量是類的初始化變量(如果類中有定義的話)。

情況一: 類的初始屬性為空

?
1
2
3
4
class MyClass(object):
  def __init__(self):
    print("MyClass類的構造方法被調用!")
class1=MyClass()

情況二: 類含有初始屬性

?
1
2
3
4
5
6
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
class1=MyClass('first_data','sencond_data')
print(class1.data2)

3. 類的封裝

封裝、繼承和多態是類的三大特征。類的封裝有兩層含義,一個是對數據的封裝,一個是對實現邏輯即方法的封裝。

數據(屬性)的封裝

還看上一個例子:

?
1
2
3
4
5
6
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
class1=MyClass('first_data','sencond_data')
print(class1.data2)

在這里類MyClass的實例化對象class1就具有了兩個屬性,分別是data1和data2,data1是私有屬性,只能在類內使用,data2是公有屬性,可以在類外使用。data1和data2就是對數據(屬性)的封裝。

實現邏輯(方法)的封裝

?
1
2
3
4
5
6
7
8
9
10
11
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def printMax(self):
    if self.__data1>self.data2:
      print(self.__data1)
    else:
      print(self.data2)
class1=MyClass(66,88)
class1.printMax()

上邊類中的printMax函數實現了比較兩個數據大小并打印的功能,這個實現邏輯在類外部來說是看不到的,只可以調用該接口,相當于一個黑箱子,這就是實現邏輯(方法)的封裝。

4. 類的私有屬性

可以在類內定義類的私有屬性和方法,私有的表明只屬于類內部的,在類外部是不可以直接訪問的,python定義私有屬性和私有方法的方法是在名稱前加上兩個下劃線 “__”。

私有屬性(變量)

?
1
2
3
4
5
6
7
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
class1=MyClass(66,88)
print(class1.data2)
print(class1.__data1)

上例中data2是公有變量,可以在類外訪問,所有calss1.data2沒有問題。 data1是類的私有屬性,類外不可以訪問,使用 class1.__data1會報錯 'MyClass' object has no attribute '__data1' 。

私有方法

?
1
2
3
4
5
6
7
8
9
10
11
12
13
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def __func1(self):
    print("MyClass類的私有方法被調用!")
  def print_data(self):
    self.__func1()
    print(self.__data1)
    print(self.data2)
class1=MyClass(66,88)
class1.print_data()
#class1.__func1()

上例中 print_data方法是類的公有方法,可以在類外直接調用, __func1方法是類的私有方法,不可以在類外調用,但是可以通過類內的print_data方法調用私有的__func1方法,即私有的方法可以在類的內部被調用。

5. 類外訪問類的私有屬性

類的私有屬性保證了外部代碼不能隨意訪問/更改對象內部的數據和方法。

但是對類內私有屬性,在類外仍然可以通過以下兩種 方式進行訪問和修改,一是通過類內的公有函數修改,一是“非法修改”。

通過類內的公有函數修改

?
1
2
3
4
5
6
7
8
9
10
11
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def setData1(self,data):
    self.__data1=data
  def printData1(self):
    print(self.__data1)
class1=MyClass(66,88)
class1.setData1(100)
class1.printData1()

非法修改

python中類的私有屬性或方法之所以不能直接從類外部進行訪問,是因為python解釋器把私有的屬性或方法 __xx 對外展示成了 _Class__xx,即單下劃線+類名+__xx 。所以如果你執意,仍然可以在類外部通過這個改變后的名稱“非法”訪問私有屬性。

?
1
2
3
4
5
6
7
8
class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def printData1(self):
    print(self.__data1)
class1=MyClass(66,88)
print(class1._MyClass__data1)

當然一般不建議這么干,不同的python編譯器可能把私有屬性/方法包裝成不同的名字。

希望本文所述對大家Python程序設計有所幫助。

原文鏈接:https://blog.csdn.net/dcrmg/article/details/75041125

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 国产黄色免费看 | 爱干在线| 国产毛片视频 | 每日更新在线观看av | 欧美精品乱码久久久久久按摩 | 日韩精品一区二 | 亚洲精品免费观看 | 成av在线| 色综合视频在线观看 | 日本不卡高字幕在线2019 | 亚洲一区二区免费视频 | 国内精品久久久久久中文字幕 | 成人国产精品免费观看 | 免费午夜视频 | 成人网av | 国产精品国产a级 | 免费网站看v片在线a | 韩日一区二区三区 | 亚洲人成在线播放 | 中文字幕 亚洲一区 | 中文字幕亚洲综合久久久软件 | 亚洲中字幕 | 在线亚洲电影 | 免费视频一区二区 | 亚洲国产区 | 欧美成人免费电影 | 亚洲www视频 | 日韩欧美一区二区三区在线观看 | 一区二区av在线 | 视频一区中文字幕 | 国产精品福利视频 | 日本激情视频一区二区三区 | 久久99精品久久久久久6194 | 91日韩精品一区二区三区 | 欧美日韩在线电影 | 久久久久久毛片免费看 | 日韩免费在线观看视频 | 日韩成人av在线 | 日韩一区二区精品 | 欧美在线不卡 | 日韩国产免费观看 |