摘要:類的介紹類用來描述具有相同的屬性和方法的對象的集合。類變量類變量在整個實(shí)例化的對象中是公用的。類的定義語法格式如下類有一個名為的特殊方法,也即是構(gòu)造函數(shù),該方法會在定義對象的時候自動調(diào)用,可以通過參數(shù)傳遞來對類的實(shí)例進(jìn)行設(shè)定。
1. 類的介紹
類(Class) 用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法。對象是類的實(shí)例,類是對象的抽象。
方法:類中定義的函數(shù)。
類變量:類變量在整個實(shí)例化的對象中是公用的。類變量定義在類中且在函數(shù)體之外。類變量通常不作為實(shí)例變量使用。
方法變量:定義在方法中的變量。
繼承:即一個派生類(derived class)繼承基類(base class)的屬性和方法。
方法重寫:如果從父類繼承的方法不能滿足子類的需求,可以對其進(jìn)行改寫,這個過程叫方法的覆蓋(override),也成為方法的重寫。
2. 類的定義語法格式如下:
class ClassName:. . .
類有一個名為 _init_() 的特殊方法,也即是構(gòu)造函數(shù),該方法會在定義對象的時候自動調(diào)用,可以通過參數(shù)傳遞來對類的實(shí)例進(jìn)行設(shè)定。
在類內(nèi)部,使用 def 關(guān)鍵字來定義一個方法,與一般函數(shù)不同,類方法必須包含參數(shù) self,并且作為第一個參數(shù),self 代表類的實(shí)例,類似于 C++ 中的 this 指針。
類的私有屬性 __private_attrs 以兩個下劃線開頭,在類內(nèi)部的方法中使用時用 self.__private_attrs 調(diào)用,不能在類外部訪問類的私有屬性。
類的私有方法 __private_method 以兩個下劃線開頭,只能在類的內(nèi)部調(diào)用,不能在類外部調(diào)用。
class person: instances = 0 # 類變量,所有類公用 def __init__(self, name, age, weight): self.name = name # 公有屬性 self.age = age self.__weight = weight # 私有屬性,在類外無法直接訪問 person.instances += 1; # 通過類來訪問類變量 def tell_a_secret(self): # 私有方法 print("Tell you a secret, my weight is {} kg.".format(self.__weight)) def speak(self): # 公有方法 print("My name is {}, I"m {} years old.".format(self.name, self.age)) self.tell_a_secret() people = person("seniusen", 21, 60) people.speak() print(people.instances) print(people.instances) # 通過實(shí)例也可以訪問類變量 # My name is seniusen, I"m 21 years old. # Tell you a secret, my weight is 60 kg. # 1 # 13. 類的單繼承
語法格式如下:
class DerivedClassName(BaseClassName1):. . .
注意圓括號中基類的順序,若是基類中有相同的方法名,而在子類使用時未指定,則 Python 從左至右進(jìn)行搜索。即方法在子類中未找到時,從左到右查找基類中是否包含該方法。
基類名 BaseClassName 必須與派生類定義在一個作用域,如果基類定義在另一個模塊,這時候我們還可以用一個表達(dá)式來定義派生類,class DerivedClassName(modname.BaseClassName):。
class student(person): def __init__(self, name, age, weight, major): person.__init__(self, name, age, weight) # 調(diào)用父類的構(gòu)造函數(shù),此時必須給定 self 參數(shù) # super(student, self).__init__(name, age, weight) 或者利用 super() 函數(shù) self.major = major # 重寫父類的方法 def speak(self): # 公有方法 person.speak(self) print("My major in college is {}.".format(self.major)) stu = student("seniusen", 21, 60, "Automation") stu.speak() print(student.instances) print(stu.instances) # 通過實(shí)例也可以訪問類變量 # My name is seniusen, I"m 21 years old. # Tell you a secret, my weight is 60 kg. # My major in college is Automation. # 2 # 23. 類的多繼承
語法格式如下:
class DerivedClassName(Base1, Base2, Base3):. . .
class teacher: def __init__(self, title, topic): self.title = title self.topic = topic def speak(self): # 公有方法 print("I"m a {} , my research topic is {}.".format(self.title, self.topic)) # 繼承自 teacher 和 student 的子類 class sample(teacher, student): def __init__(self, name, age, weight, major, title, topic): student.__init__(self, name, age, weight, major) teacher.__init__(self, title, topic) test = sample("seniusen", 21, 60, "Automation", "prefessor", "CV") test.speak() # 沒有指定方法,從左到右查找,這里調(diào)用了 teacher 類的 speak() 方法 # I"m a prefessor , my research topic is CV.
利用 super() 函數(shù)可以調(diào)用被子類重寫的父類中的方法。
class Parent: # 定義父類 def myMethod(self): print ("Method form Parent class!") class Child(Parent): # 定義子類 def myMethod(self): print ("Method form Child class!") a = Child() # 子類實(shí)例 a.myMethod() # 子類調(diào)用重寫方法 super(Child, a).myMethod() #用子類對象調(diào)用父類已被覆蓋的方法 # Method form Child class! # Method form Parent class!
參考資料 菜鳥教程
獲取更多精彩,請關(guān)注「seniusen」!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/44881.html
摘要:導(dǎo)語本文章匯總了本人在學(xué)習(xí)基礎(chǔ)之緒論篇數(shù)據(jù)結(jié)構(gòu)篇函數(shù)篇面向?qū)ο笃刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門的朋友們可以按需查看并交流。 導(dǎo)語:本文章匯總了本人在學(xué)習(xí)Python基礎(chǔ)之緒論篇、數(shù)據(jù)結(jié)構(gòu)篇、函數(shù)篇、面向?qū)ο笃⒖刂屏鞒唐驮幊唐獙W(xué)習(xí)筆記的鏈接,打算入門Python的朋友們可以按需查看并交流。 第一部分:緒論篇 1、Python數(shù)據(jù)模型 第二部分:數(shù)據(jù)結(jié)構(gòu)篇 2、序列構(gòu)成...
摘要:學(xué)習(xí)筆記七數(shù)學(xué)形態(tài)學(xué)關(guān)注的是圖像中的形狀,它提供了一些方法用于檢測形狀和改變形狀。學(xué)習(xí)筆記十一尺度不變特征變換,簡稱是圖像局部特征提取的現(xiàn)代方法基于區(qū)域圖像塊的分析。本文的目的是簡明扼要地說明的編碼機(jī)制,并給出一些建議。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 開始之前,我們先來看這樣一個提問: pyth...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
摘要:入門,第一個這是一門很新的語言,年前后正式公布,算起來是比較年輕的編程語言了,更重要的是它是面向程序員的函數(shù)式編程語言,它的代碼運(yùn)行在之上。它通過編輯類工具,帶來了先進(jìn)的編輯體驗,增強(qiáng)了語言服務(wù)。 showImg(https://segmentfault.com/img/bV1xdq?w=900&h=385); 新的一年不知不覺已經(jīng)到來了,總結(jié)過去的 2017,相信小伙們一定有很多收獲...
閱讀 2929·2021-10-18 13:33
閱讀 846·2019-08-30 14:20
閱讀 2628·2019-08-30 13:14
閱讀 2518·2019-08-29 18:38
閱讀 2887·2019-08-29 16:44
閱讀 1211·2019-08-29 15:23
閱讀 3482·2019-08-29 13:28
閱讀 1915·2019-08-28 18:00