前言一、類與對象1.兩大編程思想 編程界有兩大思想,過程和對象。我們常說Python是面向?qū)ο蟮木幊陶Z言,而C是面向過程的編程語言。那它們究竟有何不同呢?
簡單來說: 面向過程: 事物比較簡單,可以用線性的思維去解決。
面向?qū)ο螅?/strong> 事物比較復(fù)雜,是用簡單的線性思維無法解決。
共同點(diǎn): 面向過程和面向?qū)ο蠖际墙鉀Q實(shí)際問題的一種思維方式。
聯(lián)系: 注意二者是相輔相成,并不是互相對立的。在解決復(fù)雜的問題時(shí),通過面向?qū)ο蟮姆绞接欣谖覀儚暮暧^上把握事物之間復(fù)雜的關(guān)系,方便分析整體,而具體到微觀的每個(gè)操作時(shí),我們?nèi)匀皇褂妹嫦蜻^程的方式來處理。
舉個(gè)例子: 以做一道菜為例,如果以面向過程來做,我們需要分為第一步,買菜;第二步,洗菜,第三步,切菜…而如果以面向?qū)ο髞碜?,我們只需要在手機(jī)上點(diǎn)個(gè)外賣就行。但對于商家來說,他仍然需要面向過程來做。要不然,他也點(diǎn)外賣?
2.類和對象的創(chuàng)建 類與對象的概念 想要對象?那就得學(xué)類。 人以類聚,物以群分。類是多個(gè)類似事物的統(tǒng)稱,生活中,我們有人類,動物類,植物類,電子產(chǎn)品類等等等等。 我們學(xué)過的不同的數(shù)據(jù)類型如int str 就是不同的類。
對象: 此對象非彼對象,對象是類之下的包含的相似的個(gè)例。 例如11就是Int類下的一個(gè)對象。 在Python中,一切皆為對象,一切皆為對象的引用,所以在一定意義上類同時(shí)也是class的對象。
類的創(chuàng)建 語法: class 類名: pass
類由類屬性、實(shí)例方法、靜態(tài)方法和類方法組成。 注意: 1.作為一個(gè)規(guī)范的程序員,我們在寫類名的時(shí)候可以由一個(gè)或多個(gè)單詞組成,每個(gè)單詞的首字母大寫,其余小寫。 2.在類外面定義的函數(shù)我們稱為函數(shù),而在類里面定義的函數(shù)稱為方法。
class Student:#直接寫在類里的變量,稱為類屬性native_place='沈陽'#初始化方法def __init__(self,name,age):self.name=name #self.name稱為實(shí)例屬性,進(jìn)行了一個(gè)賦值的操作,將局部變量的name值賦給實(shí)體屬性self.age=age#實(shí)例方法def eat(self):print('實(shí)例方法')#靜態(tài)方法@staticmethoddef method():print('靜態(tài)方法要用staticmethod進(jìn)行修飾')#類方法@classmethoddef cmethod(cls):print('類方法要用classmethod進(jìn)行修飾')
這里實(shí)例方法中的self和類方法中的cls都代表該方法默認(rèn)的第一個(gè)參數(shù),表示實(shí)例方法可通過實(shí)例對象來調(diào)用,而類方法可通過類名來調(diào)用。self和cls這兩個(gè)單詞不是python中的關(guān)鍵字,可以寫自己想寫的單詞替代
對象的創(chuàng)建 對象的創(chuàng)建又稱為類的實(shí)例化。 而有了實(shí)例化的對象,我們就可以調(diào)用類中的內(nèi)容。 值得注意的是,類對象指的是Student類這個(gè)對象,實(shí)例對象指的是根據(jù)類構(gòu)造出來的對象,即下面代碼中的stu1,實(shí)例化對象有指向類對象的類指針 語法: 實(shí)例名=類名()
class Student:#直接寫在類里的變量,稱為類屬性native_place='沈陽'#初始化方法def __init__(self,name,age):self.name=name #self.name稱為實(shí)例屬性,進(jìn)行了一個(gè)賦值的操作,將局部變量的name值賦給實(shí)體屬性self.age=age#實(shí)例方法def rmethod(self):print('實(shí)例方法')#靜態(tài)方法@staticmethoddef method():print('靜態(tài)方法要用staticmethod進(jìn)行修飾')#類方法@classmethoddef cmethod(cls):print('類方法要用classmethod進(jìn)行修飾')#創(chuàng)建Student類的對象stu1=Student('張三',20)print(stu1)print(id(stu1))print(type(stu1))print(stu1.name) #張三print(stu1.age) #20#下面兩種寫法等價(jià)stu1.rmethod() #輸出'實(shí)例方法’Student.rmethod(stu1) #輸出'實(shí)例方法’
3.類對象與類屬性 類屬性: 類中方法外的變量稱為類屬性,被該類的所有對象所共享。 stu1=Student('張三',20)stu2=Student('蘇沐',11)print(stu1.native_place) #沈陽print(stu2.native_place) #沈陽Student.native_place='北京'print(stu1.native_place) #北京print(stu2.native_place) #北京
4.類方法與靜態(tài)方法 類方法: 使用@classmethod修飾的方法,使用類名直接訪問的方法。 stu1=Student('張三',20)stu1.cmethod()Student.cmethod()
靜態(tài)方法: 使用@staticmethod修飾的方法,使用類名直接訪問的方法。 stu1=Student('張三',20)stu1.method()Student.method()
5.動態(tài)綁定屬性和方法 在創(chuàng)建對象之后,我們可以為某個(gè)實(shí)例對象動態(tài)綁定屬性或方法。 stu1=Student('張三',20)stu2=Student('蘇沐',11)stu2.gender='男' #動態(tài)綁定屬性print(stu2.gender)#print(stu1.gender) #報(bào)錯(cuò)def show():print('我是動態(tài)綁定方法')stu1.show=show #動態(tài)綁定方法stu1.show()#stu2.show() #報(bào)錯(cuò)
__init__中的屬性是所有對象共有的,而類創(chuàng)建之后動態(tài)綁定的gender屬性只有stu2對象有。同樣,方法也是一樣的。 總結(jié)今日分享到此結(jié)束,由于筆者還在求學(xué)之路上輾轉(zhuǎn)徘徊,水平有限,文章中可能有不對之處,還請各位大佬指正,祝愿每一個(gè)熱愛編程的人都實(shí)現(xiàn)追求,考研上岸進(jìn)大廠,熬夜禿頭卷中王。
|