激情久久久_欧美视频区_成人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

延伸 · 閱讀

精彩推薦
568
主站蜘蛛池模板: 欧美精品欧美极品欧美激情 | 精品国产乱码一区二区 | 日本黄色免费播放 | 香蕉国产9| 亚洲网视频| 爽毛片| 大学生一级毛片在线视频 | 久久久成人一区二区免费影院 | 性欧美大战久久久久久久免费观看 | av黄色片网站 | 国产a级片电影 | 成人黄色免费 | 欧美一区二区三区成人精品 | 欧美成人精品一区 | 免费在线观看毛片视频 | 欧美一级片在线 | 成人黄色免费小视频 | 亚州视频在线 | 亚洲国产精品二区 | 免费国产不卡午夜福在线 | 99麻豆久久久国产精品免费 | 亚洲国产精品一区二区精品 | 毛片大全免费看 | 日韩毛片在线看 | 欧美视频99| 九九热精品免费 | 精品国产乱码久久久久久久 | 精品久久久久久久久久久久久久 | 亚洲天堂在线电影 | 高清国产午夜精品久久久久久 | va毛片| 成人免费一区二区三区在线观看 | 国产一区二区成人在线 | 色网在线视频 | 久久成人激情视频 | 欧美a v在线 | 久久久电影电视剧免费看 | 九草网| 亚洲一区二区免费 | 久久久精品视频网站 | 午夜视频色 |