最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的定義、實(shí)例化、封裝及私有變量/方法詳解

 更新時(shí)間:2019年02月28日 11:53:27   作者:-牧野-  
這篇文章主要介紹了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的定義、實(shí)例化、封裝及私有變量/方法,結(jié)合具體實(shí)例形式較為詳細(xì)的分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的定義、實(shí)例化、封裝、私有變量、私有方法等相關(guān)使用技巧,需要的朋友可以參考下

本文實(shí)例講述了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類(lèi)的定義、實(shí)例化、封裝及私有變量/方法。分享給大家供大家參考,具體如下:

1. 定義類(lèi)

python中定義一個(gè)類(lèi)的格式如下:

class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def __func1(self):
    print("MyClass類(lèi)的私有方法被調(diào)用!")
  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()

類(lèi)通過(guò)關(guān)鍵字 class 引導(dǎo),后跟類(lèi)的名稱(chēng),通常第一個(gè)字母大寫(xiě),類(lèi)名稱(chēng)MyClass后的括號(hào)內(nèi)的object表示該類(lèi)的父類(lèi),如果定義的類(lèi)沒(méi)有顯明從哪個(gè)類(lèi)繼承來(lái)的,就在括號(hào)內(nèi)使用object,object類(lèi)是所有類(lèi)的父類(lèi)。

__init__是定義的類(lèi)的構(gòu)造函數(shù),可以對(duì)類(lèi)的變量進(jìn)行初始化,每當(dāng)該類(lèi)被實(shí)例化的時(shí)候,就會(huì)先執(zhí)行該構(gòu)造函數(shù)。

在類(lèi)中定義的函數(shù)的一個(gè)參數(shù)一定要是self,代表類(lèi)當(dāng)前的實(shí)例化對(duì)象,但在調(diào)用時(shí),不需要傳遞這個(gè)參數(shù)。

2. 類(lèi)的實(shí)例

類(lèi)的實(shí)例化方法如下:

obj=MyClass(x,x)

obj是類(lèi)的實(shí)例化對(duì)象,MyClass是類(lèi)名,括號(hào)內(nèi)的變量是類(lèi)的初始化變量(如果類(lèi)中有定義的話)。

情況一: 類(lèi)的初始屬性為空

class MyClass(object):
  def __init__(self):
    print("MyClass類(lèi)的構(gòu)造方法被調(diào)用!")
class1=MyClass()

情況二: 類(lèi)含有初始屬性

class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
class1=MyClass('first_data','sencond_data')
print(class1.data2)

3. 類(lèi)的封裝

封裝、繼承和多態(tài)是類(lèi)的三大特征。類(lèi)的封裝有兩層含義,一個(gè)是對(duì)數(shù)據(jù)的封裝,一個(gè)是對(duì)實(shí)現(xiàn)邏輯即方法的封裝。

數(shù)據(jù)(屬性)的封裝

還看上一個(gè)例子:

class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
class1=MyClass('first_data','sencond_data')
print(class1.data2)

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

實(shí)現(xiàn)邏輯(方法)的封裝

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()

上邊類(lèi)中的printMax函數(shù)實(shí)現(xiàn)了比較兩個(gè)數(shù)據(jù)大小并打印的功能,這個(gè)實(shí)現(xiàn)邏輯在類(lèi)外部來(lái)說(shuō)是看不到的,只可以調(diào)用該接口,相當(dāng)于一個(gè)黑箱子,這就是實(shí)現(xiàn)邏輯(方法)的封裝。

4. 類(lèi)的私有屬性

可以在類(lèi)內(nèi)定義類(lèi)的私有屬性和方法,私有的表明只屬于類(lèi)內(nèi)部的,在類(lèi)外部是不可以直接訪問(wèn)的,python定義私有屬性和私有方法的方法是在名稱(chēng)前加上兩個(gè)下劃線 “__”。

私有屬性(變量)

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是公有變量,可以在類(lèi)外訪問(wèn),所有calss1.data2沒(méi)有問(wèn)題。 data1是類(lèi)的私有屬性,類(lèi)外不可以訪問(wèn),使用 class1.__data1會(huì)報(bào)錯(cuò) 'MyClass' object has no attribute '__data1' 。

私有方法

class MyClass(object):
  def __init__(self,data1,data2):
    self.__data1=data1
    self.data2=data2
  def __func1(self):
    print("MyClass類(lèi)的私有方法被調(diào)用!")
  def print_data(self):
    self.__func1()
    print(self.__data1)
    print(self.data2)
class1=MyClass(66,88)
class1.print_data()
#class1.__func1()

上例中 print_data方法是類(lèi)的公有方法,可以在類(lèi)外直接調(diào)用, __func1方法是類(lèi)的私有方法,不可以在類(lèi)外調(diào)用,但是可以通過(guò)類(lèi)內(nèi)的print_data方法調(diào)用私有的__func1方法,即私有的方法可以在類(lèi)的內(nèi)部被調(diào)用。

5. 類(lèi)外訪問(wèn)類(lèi)的私有屬性

類(lèi)的私有屬性保證了外部代碼不能隨意訪問(wèn)/更改對(duì)象內(nèi)部的數(shù)據(jù)和方法。

但是對(duì)類(lèi)內(nèi)私有屬性,在類(lèi)外仍然可以通過(guò)以下兩種 方式進(jìn)行訪問(wèn)和修改,一是通過(guò)類(lèi)內(nèi)的公有函數(shù)修改,一是“非法修改”。

通過(guò)類(lèi)內(nèi)的公有函數(shù)修改

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中類(lèi)的私有屬性或方法之所以不能直接從類(lèi)外部進(jìn)行訪問(wèn),是因?yàn)閜ython解釋器把私有的屬性或方法 __xx 對(duì)外展示成了 _Class__xx,即單下劃線+類(lèi)名+__xx 。所以如果你執(zhí)意,仍然可以在類(lèi)外部通過(guò)這個(gè)改變后的名稱(chēng)“非法”訪問(wèn)私有屬性。

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)

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

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門(mén)與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • python切片復(fù)制列表的知識(shí)點(diǎn)詳解

    python切片復(fù)制列表的知識(shí)點(diǎn)詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于python切片復(fù)制列表的知識(shí)點(diǎn)相關(guān)內(nèi)容,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-10-10
  • python 數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換的總結(jié)

    python 數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換的總結(jié)

    這篇文章主要介紹了python 數(shù)據(jù)類(lèi)型強(qiáng)制轉(zhuǎn)換的使用總結(jié),幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2021-01-01
  • Python 文件操作的詳解及實(shí)例

    Python 文件操作的詳解及實(shí)例

    這篇文章主要介紹了Python 文件操作的詳解及實(shí)例的相關(guān)資料,希望通過(guò)本文大家能夠理解掌握Python 文件操作的知識(shí),需要的朋友可以參考下
    2017-09-09
  • Python使用Kubernetes API訪問(wèn)集群

    Python使用Kubernetes API訪問(wèn)集群

    本文主要介紹了Python使用Kubernetes API訪問(wèn)集群,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Python基礎(chǔ)教程之pytest參數(shù)化詳解

    Python基礎(chǔ)教程之pytest參數(shù)化詳解

    參數(shù)化就是把測(cè)試過(guò)程中的數(shù)據(jù)提取出來(lái),通過(guò)參數(shù)傳遞不同的數(shù)據(jù)來(lái)驅(qū)動(dòng)用例運(yùn)行,這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之pytest參數(shù)化的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • 利用python控制Qt程序的示例詳解

    利用python控制Qt程序的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用python實(shí)現(xiàn)控制Qt程序,從而進(jìn)行文本輸入,按鈕點(diǎn)擊等組件控制,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • Python讀取mp3中ID3信息的方法

    Python讀取mp3中ID3信息的方法

    這篇文章主要介紹了Python讀取mp3中ID3信息的方法,實(shí)例分析了Python中mutagen包的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03
  • python關(guān)于矩陣重復(fù)賦值覆蓋問(wèn)題的解決方法

    python關(guān)于矩陣重復(fù)賦值覆蓋問(wèn)題的解決方法

    這篇文章主要介紹了python關(guān)于矩陣重復(fù)賦值覆蓋問(wèn)題的解決方法,涉及Python深拷貝與淺拷貝相關(guān)操作與使用技巧,需要的朋友可以參考下
    2019-07-07
  • 在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    在pycharm中使用pipenv創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程

    這篇文章主要介紹了在pycharm中使用pipenv來(lái)創(chuàng)建虛擬環(huán)境和安裝django的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 淺談Django REST Framework限速

    淺談Django REST Framework限速

    這篇文章主要介紹了淺談Django REST Framework限速,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12

最新評(píng)論

满洲里市| 永顺县| 阿拉善右旗| 贵港市| 轮台县| 镇康县| 盱眙县| 厦门市| 江津市| 泗水县| 栖霞市| 新乐市| 肇庆市| 灯塔市| 弥渡县| 河池市| 宁海县| 舒兰市| 上饶县| 辉南县| 安远县| 岳普湖县| 屏山县| 丽水市| 蒙城县| 昌吉市| 阿鲁科尔沁旗| 奈曼旗| 萍乡市| 大悟县| 安岳县| 中超| 海门市| 霍州市| 青浦区| 扶绥县| 康马县| 汉寿县| 读书| 荆州市| 米易县|