一讨衣、面向?qū)ο蠹夹g(shù)簡介
? ??類(Class):用來描述具有相同的屬性和方法的對象的集合。它定義了該集合中每個對象所共有的屬性和方法式镐。對象是類的實(shí)例反镇。
類變量:類變量在整個實(shí)例化的對象中是公用的。類變量定義在類中且在函數(shù)體之外娘汞。類變量通常不作為實(shí)例變量使用歹茶。
數(shù)據(jù)成員:類變量或者實(shí)例變量, 用于處理類及其實(shí)例對象的相關(guān)的數(shù)據(jù)悠砚。
方法重寫:如果從父類繼承的方法不能滿足子類的需求禽篱,可以對其進(jìn)行改寫工窍,這個過程叫方法的覆蓋(override)背传,也稱為方法的重寫窿克。
局部變量:定義在方法中的變量缨该,只作用于當(dāng)前實(shí)例的類腹忽。
實(shí)例變量:在類的聲明中猖败,屬性是用變量來表示的旷偿。這種變量就稱為實(shí)例變量烹俗,是在類聲明的內(nèi)部但是在類的其他成員方法之外聲明的。
繼承:即一個派生類(derived class)繼承基類(base class)的字段和方法萍程。繼承也允許把一個派生類的對象作為一個基類對象對待幢妄。例如,有這樣一個設(shè)計:一個Dog類型的對象派生自Animal類尘喝,這是模擬"是一個(is-a)"關(guān)系(Dog是一個Animal)磁浇。
實(shí)例化:創(chuàng)建一個類的實(shí)例,類的具體對象朽褪。
方法:類中定義的函數(shù)置吓。
對象:通過類定義的數(shù)據(jù)結(jié)構(gòu)實(shí)例。對象包括兩個數(shù)據(jù)成員(類變量和實(shí)例變量)和方法缔赠。
二衍锚、創(chuàng)建類
? ??????使用 class 語句來創(chuàng)建一個新類,class 之后為類的名稱并以冒號結(jié)尾:
? ? ? ? 格式:class 類名:
? ? ? ? ? ? ? ? ? ? ? ? def __init__(self,屬性名1,屬性名2):
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? self.屬性名1=屬性名1
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? self.屬性名2=屬性名2
? ??????????????????????
? ? ? ? ? ? ? ? ? ? ? ? def __str__(self):
? ? ? ? ? ? ? ? ? ? ? ? ? ? print('打印類信息')
三嗤堰、
創(chuàng)建實(shí)例對象
????????格式:
? ? ? ? ? ? 變量名 = 類名()
訪問屬性
? ? ? ?格式:
? ? ? ? ? ? 變量名.屬性名
訪問方法:
? ? ? ? 格式:
? ? ? ? ? ? 變量名.方法名()
可以添加戴质,刪除,修改類的屬性
變量名.屬性名=值? # 添加一個? 屬性
變量名.屬性名=值? # 修改屬性,在已存在的情況下
del 變量名.屬性名? # 刪除屬性? ? ? ? ?
四告匠、Python內(nèi)置類屬性
dict : 類的屬性(包含一個字典戈抄,由類的數(shù)據(jù)屬性組成)?
doc :類的文檔字符串?
name: 類名?
module: 類定義所在的模塊(類的全名是'main.className',如果類位于一個導(dǎo)入模塊mymod中后专,那么className.module 等于 mymod)?
bases : 類的所有父類構(gòu)成元素(包含了一個由所有父類組成的元組)
調(diào)用:? 類名.屬性名??
五划鸽、類的繼承
? ? 語法格式:
????????class 派生類名(基類名):
? ? ? ? ? ? ..具體代碼..
可以繼承多個類
class A:? # 定義類 A
????.....
class B:? # 定義類 B
????.....
class C(A,B):? # 繼承類 A 和 B
? ??.....
方法重寫
? ? 如果你的父類方法的功能不能滿足你的需求,你可以在子類重寫你父類的方法
? ??????class Animal:? # 定義父類
????????????def run(self):
????????????????print("Animal is running...")? # 調(diào)用父類方法
? ??????class Dog(Animal):? # 定義子類
????????????def run(self):
????????????????print("Dog is running.....")? # 調(diào)用子類方法
類屬性與方法
????類的私有屬性
? ??????__private_attrs:
????????????兩個下劃線開頭戚哎,聲明該屬性為私有裸诽,不能在類的外部被使用或直接訪問。在類內(nèi)部的方法中使用時?self.__private_attrs型凳。
????類的方法
? ? ? ? ? ? 在類的內(nèi)部丈冬,使用?def?關(guān)鍵字可以為類定義一個方法,與一般函數(shù)定義不同甘畅,類方法必須包含參數(shù) self,且為第一個參數(shù)
? ? 類的私有方法
? ??????????__private_method:兩個下劃線開頭埂蕊,聲明該方法為私有方法,不能在類的外部調(diào)用橄浓。在類的內(nèi)部調(diào)用?self.__private_methods
單下劃線粒梦、雙下劃線亮航、頭尾雙下劃線說明:
foo: 定義的是特殊方法荸实,一般是系統(tǒng)定義名字 ,類似init()之類的缴淋。
_foo: 以單下劃線開頭的表示的是 protected 類型的變量准给,即保護(hù)類型只能允許其本身與子類進(jìn)行訪問,不能用于from module import *
__foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進(jìn)行訪問了重抖。