python小菜的學習之路 之 物件導向程式設計

2021-07-29 23:09:18 字數 3808 閱讀 1760

物件導向程式設計,是大多數高階語言都具有的程式設計思想,python 也不例外。物件導向主要體現為以下三點特性:

在python語言中,物件導向最重要的兩個概念為 類(class)和例項(instance).

定義類的關鍵字為class,這與大多數程式語言類似,class後接類名,類名後緊接著父類名稱,如果沒有繼承類,則使用object類。定義類如下:

class

classname

(object):

建立例項是通過類名實現的,例如:

class1=classname() #變數class1 指向了乙個classname的例項
封裝

在python 類定義中,也可以使用「建構函式」功能,通過定義乙個特殊的 _ init _方法,第乙個引數永遠是 self,表示建立的例項本身。

有了_ init _方法,建立實重點內容例的時候,必須傳入引數。例如:

class

a(object):

def__init__(self,name):

self.name=name

stu=a('hello')

stu.name # 輸出為 hello

訪問限制,python語言中,如果需要對類中的變數進行作用域限定,即限定內部屬性不被外部訪問,可以在屬性的名稱前加兩個下滑線__。一旦在類中的變數名前加入__,則宣告了變數為類的私有變數,只能在內部進行訪問,不能外部訪問。

例如:

class

a(object):

def__init__(self,name):

self.__name=name

defprinta(self):

print(self.__name)

stu=a('zxg')

print(stu.__name) #會報錯,錯誤型別attributeerror: 'a' object has no attribute '__name'

通過這種方式,就有效地保護了類物件內部的屬性安全,如果需要獲取類的私有變數的值,或者外部改變內部成員變數,只需要在類內部,增加如下的方法即可,

class

a(object):

def__init__(self,name):

self.__name=name

defprinta(self):

print(self.__name)

defget_name(self):

return

self.__name

defset_name(self,name):

self.__name=name

stu=a('zxg')

a_name=stu.get_name() #變數a_name 儲存了self.__name的值

stu.set_name('a') #變數self.__name值已經更新為 『a』

雖然使用__變數,無法直接從外部訪問變數,但是這是python直譯器將變數重名的原因,拿上面的例子而言,python直譯器將__name對外顯示為_a__name,所以使用stu.__name獲取變數值,但是如果使用stu._a__name,則有可能獲取內部變數的值,為什麼這裡使用有可能?因為不同的python直譯器,對類內部變數的重新命名規則不同,因此,強烈建議不要這樣訪問內部變數。

繼承

物件導向程式設計,繼承使用廣泛,簡單地說,當我們定義乙個類,如果這個類需要繼承某個現有的類,則把新產生的類稱為子類,被繼承的類稱為父類或者基類。

舉個例:

class

student(object): #基類

defp_info(self):

print('i am student!')

class

mid_student(student): #初中學生子類,繼承student

pass

class

high_student(student):#高中學生子類,繼承student

pass

子類可以繼承父類的全部功能,使用如下:

a=mid_student()

a.p_info() # 輸出 i am student!

b=high_student()

b.p_info() #輸出 i am student!

當然,也可在子類中繼續增加方法,

class

mid_student

(student):

defp_info

(self):

print('i am mid_student!') #函式名與父類函式名一致,因此呼叫時,會覆蓋父類函式

defp_act

(self):

print ('more homework!!!')

呼叫後,結果如下:

a=mid_student()

a.p_info() # 輸出 i am mid_student!

a.p_act() #輸出 more homework!!!

如上,當子類的函式覆蓋父類的函式時,**執行時,總是會呼叫子類的函式功能,這樣,就體現了 物件導向程式設計的另一特性:多型。

多型

子類繼承父類 ,任何依賴父類作為引數的函式都可以不加修改地正常執行, 執行時由該物件的確切型別決定。

class

student

(object):

defp_info

(self):

print('i am student!!')

class

mid_student

(student):

defp_info

(self):

print('i am mid_student!')

defp_act

(self):

print ('more homework!!!')

defp_info_twice

(student):

# 引數為父類

student.p_info()

student.p_info()

class

high_student

(student):

#高中學生子類,繼承student

#def p_info(self):

# print('i am high_student!')

defpp

(mid_student):

mid_student.p_info()

a=mid_student()

a.p_info_twice() #自動呼叫 mid_student型別的p_info方法

#輸出 i am mid_student!

i am mid_student!

b=high_student()

b.pp()

#輸出 i am student!!

# high_student繼承的是student不是mid_student,因此 pp方法的mid_student型別,會逐一向上尋找,找到父類student的p_info方法

python小菜的學習之路之python初識

筆者介紹 本文python初學者,因為名字內帶xiong,因此自嘲 熊小菜 熊小菜因為在解決課題問題時,接觸到過多的python,這對於乙個c 程式設計師而言是鬱悶的,此處,引用一句名言 既然你改變不了環境,那就學會適應它 因此,熊小菜開始進行python的學習,希望終有一天從熊小菜轉變成熊小神。話...

小菜鳥學習Python之路 filter(素數)

設計思路 素數 大於1的自然數,最小的素數是2。約數只有1和自身的自然數為素數 大於2的偶數都不是素數 step1 生成乙個以3為首的奇數序列 generator def odd iter n 1 while true n n 2 yield n這是乙個無限序列 step 2 定義乙個篩選函式 de...

Python學習之物件導向

物件導向是一種設計思想 1 符合人們的思考習慣 2 把執行者變成指揮者 3 簡化功能,把複雜的事情簡單化 想完成一件事,找具有這樣功能的物件 如果能找到,呼叫這個物件的功能,完成這個事 如果找不到,建立具有這樣功能的物件,再呼叫完成這個事 類是對事物的描述,是抽象的。物件是類的具體體現。類對事物的描...