Python面向對象之類的封裝操作示例
本文實例講述了Python面向對象之類的封裝操作。分享給大家供大家參考,具體如下:
承接上一節(jié)《Python面向對象之類和實例》,學了Student類的定義及實例化,每個實例都擁有各自的name和score。現(xiàn)在若需要打印一個學生的成績,可定義函數(shù) print_score()
該函數(shù)為類外的函數(shù),如下:
class Student(object): def __init__(self, name, score): self.name = name self.score = score May = Student("May",90) # 須要提供兩個屬性 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 寫法 print("{0}'s score is: {1}".format(Student.name,Student.score)) # 建議使用 Python 2.7 + .format優(yōu)化寫法 print_score(May) print_score(Peter)
既然Student實例本身就擁有這些數(shù)據(jù),要訪問這些數(shù)據(jù),就沒有必要從外面的函數(shù)去訪問,我們可以直接在Student類的內部定義訪問數(shù)據(jù)的函數(shù)。這樣,就把數(shù)據(jù)給“封裝”起來了。
“封裝”就是將抽象得到的數(shù)據(jù)和行為(或功能)相結合,形成一個有機的整體(即類);封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只是要通過外部接口,一特定的訪問權限來使用類的成員。
而這些封裝數(shù)據(jù)的函數(shù)是和Student類本身是關聯(lián)起來的,我們稱之為類的方法。那如何定義類的方法呢?
就要用到對象 self 本身,參考上例,把 print_score()
函數(shù)寫為類的方法(Python2.7之后的版本,推薦.format
輸出寫法):
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)化寫法 May = Student("May",90) Peter = Student("Peter",85)
定義類的方法:除了第一個參數(shù)是self外,其他和普通函數(shù)一樣。
實例調用方法:只需要在實例變量上直接調用,除了self不用傳遞,其他參數(shù)正常傳入;注意,若類的方法僅需要self,不需要其他,調用該方法時,僅需 instance_name.function_name()
這樣一來,我們從外部看Student類,就只需要知道,創(chuàng)建實例需要給出name和score,而如何打印,都是在Student類的內部定義的,這些數(shù)據(jù)和邏輯被“封裝”起來了,調用很容易,但卻不用知道內部實現(xiàn)的細節(jié)。
封裝的另一個好處是可以給Student類增加新的方法;這邊的方法也可以要求傳參,如新增定義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)化寫法 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相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經典教程》
希望本文所述對大家Python程序設計有所幫助。
相關文章
python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url
今天小編就為大家分享一篇python 實現(xiàn)圖片上傳接口開發(fā) 并生成可以訪問的圖片url,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)
在pymysql中支持對占位符的處理,開發(fā)者需要在SQL中使用“%”定義占位符,在使用excute()方法執(zhí)行時對占位符的數(shù)據(jù)進行填充即可,本文給大家介紹python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)的方法,需要的朋友參考下吧2021-12-12Python實現(xiàn)SMTP發(fā)送郵件詳細教程
這篇文章主要為大家詳細介紹了Python實現(xiàn)SMTP發(fā)送郵件詳細教程,附SMTP郵件發(fā)送代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08如何用Python數(shù)據(jù)可視化來分析用戶留存率
今天和大家來分享一些數(shù)據(jù)可視化方向的干貨,我們來嘗試用Python來繪制一下“漏斗圖”,感興趣的小伙伴和小編一起進入課題吧,但愿大家會有所收獲2021-09-09Python之Django自動實現(xiàn)html代碼(下拉框,數(shù)據(jù)選擇)
這篇文章主要介紹了Python之Django自動實現(xiàn)html代碼(下拉框,數(shù)據(jù)選擇),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03python 如何利用argparse解析命令行參數(shù)
這篇文章主要介紹了python 利用argparse解析命令行參數(shù)的步驟,幫助大家更好的理解和學習python,感興趣的朋友可以了解下2020-09-09