溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Python怎么實(shí)現(xiàn)類(lèi)的封裝

發(fā)布時(shí)間:2021-06-04 16:39:34 來(lái)源:億速云 閱讀:256 作者:Leah 欄目:開(kāi)發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Python怎么實(shí)現(xiàn)類(lèi)的封裝,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

該函數(shù)為類(lèi)外的函數(shù),如下:

class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = score
May = Student("May",90)           # 須要提供兩個(gè)屬性
Peter = Student("Peter",85)
print(May.name, May.score)
print(Peter.name, Peter.score)
def print_score(Student):          # 外部函數(shù)print_score(Student)
  # print("%s's score is: %d" %(Student.name,Student.score))       # 普通 print 寫(xiě)法
  print("{0}'s score is: {1}".format(Student.name,Student.score))    # 建議使用 Python 2.7 + .format優(yōu)化寫(xiě)法
print_score(May)
print_score(Peter)

既然Student實(shí)例本身就擁有這些數(shù)據(jù),要訪(fǎng)問(wèn)這些數(shù)據(jù),就沒(méi)有必要從外面的函數(shù)去訪(fǎng)問(wèn),我們可以直接在Student類(lèi)的內(nèi)部定義訪(fǎng)問(wèn)數(shù)據(jù)的函數(shù)。這樣,就把數(shù)據(jù)給“封裝”起來(lái)了。

“封裝”就是將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個(gè)有機(jī)的整體(即類(lèi));封裝的目的是增強(qiáng)安全性和簡(jiǎn)化編程,使用者不必了解具體的實(shí)現(xiàn)細(xì)節(jié),而只是要通過(guò)外部接口,一特定的訪(fǎng)問(wèn)權(quán)限來(lái)使用類(lèi)的成員。

而這些封裝數(shù)據(jù)的函數(shù)是和Student類(lèi)本身是關(guān)聯(lián)起來(lái)的,我們稱(chēng)之為類(lèi)的方法。那如何定義類(lèi)的方法呢?

就要用到對(duì)象 self 本身,參考上例,把 print_score() 函數(shù)寫(xiě)為類(lèi)的方法(Python2.7之后的版本,推薦.format 輸出寫(xiě)法):

class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = score
  def print_score(self):
    print("{self.name}'s score is: {self.score}".format(self=self))    # Python 2.7 + .format優(yōu)化寫(xiě)法
May = Student("May",90)
Peter = Student("Peter",85)

定義類(lèi)的方法:除了第一個(gè)參數(shù)是self外,其他和普通函數(shù)一樣。

實(shí)例調(diào)用方法:只需要在實(shí)例變量上直接調(diào)用,除了self不用傳遞,其他參數(shù)正常傳入;注意,若類(lèi)的方法僅需要self,不需要其他,調(diào)用該方法時(shí),僅需 instance_name.function_name()

這樣一來(lái),我們從外部看Student類(lèi),就只需要知道,創(chuàng)建實(shí)例需要給出name和score,而如何打印,都是在Student類(lèi)的內(nèi)部定義的,這些數(shù)據(jù)和邏輯被“封裝”起來(lái)了,調(diào)用很容易,但卻不用知道內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)。

封裝的另一個(gè)好處是可以給Student類(lèi)增加新的方法;這邊的方法也可以要求傳參,如新增定義compare 函數(shù),如下:

class Student(object):
  def __init__(self, name, score):
    self.name = name
    self.score = score
  def print_score(self):
    print("{self.name}'s score is: {self.score}".format(self=self))    # Python 2.7 + .format優(yōu)化寫(xiě)法
  def compare(self,s):
    if self.score>s:
      print("better than %d" %(s))
    elif self.score==s:
      print("equal %d" %(s))
    else:
      print("lower than %d" %(s))
May = Student("May",90)
Peter = Student("Peter",85)
May.print_score()
Peter.print_score()
May.compare(100)
May.compare(90)
May.compare(89)

上述就是小編為大家分享的Python怎么實(shí)現(xiàn)類(lèi)的封裝了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI