面向?qū)ο缶幊獭狾bject Oriented Programming(OOP)
OOP 把對(duì)象作為程序的基本單元播赁,一個(gè)對(duì)象包含了數(shù)據(jù)和操作數(shù)據(jù)的函數(shù)苗傅。
抽象類實(shí)體對(duì)象,類不能對(duì)數(shù)據(jù)成員進(jìn)行賦值∈ⅲ【Class 是一種抽象概念,而實(shí)例( Instance)則是一個(gè)個(gè)具體的 Student】
知識(shí)點(diǎn):數(shù)據(jù)封裝训裆,訪問控制眶根,繼承,多態(tài)边琉。
- 類可以起到模板的作用
數(shù)據(jù)封裝:數(shù)據(jù)和邏輯被“封裝”起來了属百,調(diào)用很容易,而不用知道內(nèi)部實(shí)現(xiàn)的細(xì)節(jié)
- 封裝數(shù)據(jù)的函數(shù)稱為類的方法变姨。
- 類是創(chuàng)建實(shí)例的模板族扰,而實(shí)例則是一個(gè)一個(gè)具體的對(duì)象,各個(gè)實(shí)例擁有的數(shù)據(jù)都互相獨(dú)立定欧,互不影響渔呵;方法就是與實(shí)例綁定的函數(shù),和普通函數(shù)不同忧额,方法可以直接訪問實(shí)例的數(shù)據(jù)厘肮;通過在實(shí)例上調(diào)用方法,我們就直接操作了對(duì)象內(nèi)部的數(shù)據(jù)睦番,但無需知道方法內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)类茂。
訪問控制:可以對(duì)參數(shù)做檢查耍属,避免傳入無效的參數(shù)。
class Student(object):
...
def set_score(self, score):
if 0 <= score <= 100:
self.__score = score
else:
raise ValueError('bad score')
繼承:
# -*- coding: utf-8 -*-
# 繼承就是可以起到功能擴(kuò)展的功能巩检,父類可以創(chuàng)建通用方法厚骗,子類可以調(diào)用,也可以重新寫自己的方法
# 當(dāng)子類和父類存在相同的方法時(shí)兢哭,子類的方法會(huì)覆蓋父類的方法领舰。
class Animal(object):
def run(self):
print("Animal is running on the road!...")
class Dog(Animal):
def run(self):
print("Dog is running!")
class Cat(Animal):
pass
dog = Dog()
dog.run()
cat = Cat()
cat.run()
print(isinstance(a,list))
print(isinstance(b,Animal))
print(isinstance(c,Dog))
print(isinstance(c,Animal))#子類一定屬于其父類,反之則不行
多態(tài):調(diào)用方只管調(diào)用迟螺,不管細(xì)節(jié)
- 定義一個(gè)class的時(shí)候?qū)嶋H上就定義了一種數(shù)據(jù)類型冲秽。
- 繼承可以把父類的所有功能都直接拿過來,這樣就不必重零做起矩父,子類只需要新增自己特有的方法锉桑,也可以把父類不適合的方法覆蓋重寫;有了繼承窍株,才能有多態(tài)民轴。在調(diào)用類實(shí)例方法的時(shí)候,盡量把變量視作父類類型球订,這樣后裸,所有子類類型都可以正常被接收。