#:
將資料(屬性)和行為(方法)包裝到類物件中,在方法內部對屬性進行操作,在類物件的外部呼叫方法
在類物件的內部通過訪問控制把某些屬性和方法隱藏起來,不允許在類物件外部直接訪問,而是在類物件內部對外提供公開的介面方法以訪問隱藏的資訊。
介面
class student(object):
def __init__(self):
self.__score = 90
def get_score(self):
return self.__score
def set_score(self,score):
if 0 <= score <= 100:
self.__score = score
else:
raise valueerror("成績必須在0~100值間")
s = student()
s.get_score()
s.set_score(88)
print(s.get_score())
s.set_score(123)
當幾個類物件中有共同的屬性和方法時,就可以把這些屬性和方法抽象並提取到乙個基類中,每個類物件
特有的屬性和方法還是在本類物件中定義,這樣,只需要讓每個類物件都繼承這個基類,就可以訪問基類中
的屬性和方法了。繼承基類的每個類物件被稱為派生類。基類也被稱為父類或超類,派生類也被稱為子類。
python中的所有類物件都繼承自乙個統一的基類:object。這就是為什麼我們在定義類物件時要在類名後
面新增object了
單繼承:子類只有乙個直接父類
多繼承:多個
子類會繼承所有(直接、間接)父類的所有屬性和方法
class animal(object):
def eat(self):
print("吃飯")
def drink(self):
print("喝水")
class dog(animal):
def swim(self):
print("游泳")
dog = dog()
dog.eat()
dog.drink()
dog.swim()
如果子類對繼承自父類的某個屬性或方法不滿意,可以在子類中對其進行重寫從而提供自定義的實現,重寫的方式為:在子類中定義與父類中同名的屬性或方法(包括裝飾器)
子類重寫父類的屬性和方法後,通過子類或其實例物件只能訪問子類重寫後的屬性和方法,而無法再訪問父類中被重寫的屬性和方法
父類中被重寫的名為***的方法,在子類重寫後的方法中可以通過supper().***進行呼叫
mro方法的解析順序
如果想呼叫父類被重寫的方法,給super()傳入兩個實參:super(a_type,obj),第乙個是類物件,第二個是例項物件
被指定的父類是obj所對應類物件中的mro中,a_type後面的那個類物件
class parenclass(object):
ca = 'ca (父類)'
ca = 18
def __init__(self):
print('__init__()被呼叫了(父類)')
def im(self):
print('im()被呼叫了(父類)')
@classmethod
def cm(cls):
print('cm()被呼叫了(父類)')
class childclass(parenclass):
# ca = 'ca (子類)'
def __init__(self):
print('__init__()被呼叫了(子類)')
def im(self):
print('im()被呼叫了(子類)')
@classmethod
def cm(cls):
print('cm()被呼叫了(子類)')
cc = childclass()
print(childclass.ca)
print(cc.ca)
cc.im()
childclass.cm()
cc.cm()
物件導向 03
類屬性和例項屬性的概念 類屬性是給類物件 類是乙個特殊的物件 中定義的屬性,通常用來記錄與這個類相關的特徵,類屬性不會用於記錄具體物件的特徵。類屬性的定義是在初始化方法之外的 例項物件的屬性叫做例項屬性,在初始化方法內部定義 類屬性和例項屬性的訪問 類屬性的訪問是類名.類屬性 例項屬性的訪問是例項物...
物件導向03
1.static 靜態的 靜態不能直接呼叫非靜態,非靜態可以呼叫靜態 1 靜態變數 物件共有的屬性可以定義為靜態 1.1 由static修飾 1.2 屬於類的,存在方法區中,只有乙份,隨著類載入而使用 1.3 常常通過類名.來訪問 1.4 何時用 所有物件的資料一樣時使用 2 靜態方法 2.1 由s...
python 物件導向 03 物件導向基礎語法
在python中可以使用以下兩個方法驗證 在識別符號 資料後輸入乙個.然後按下tab鍵,ipython會提示該物件能夠呼叫的方法列表 使用內建函式dir傳入識別符號 資料,可以檢視物件內的所有屬性及方法 提示 方法名 格式的方法是python提供的內建方法 屬性,稍後會給大家介紹一些常用的 內建方法...