物件導向程式設計

2021-09-29 08:08:38 字數 4175 閱讀 4343

面向過程:把電腦程式視為一系列的命令集合,一組函式順序執行,先做什麼再做什麼

物件導向:把電腦程式視為一系列物件的集合,a要做什麼b要做什麼

class是一種抽象概念,比如我們定義的class——student,是指學生這個概念

而例項(instance)則是乙個個具體的student,比如,bart simpson和lisa simpson是兩個具體的student。

class既包含資料,又包含運算元據的方法

class

student

(object):

#class 類名首字母大寫(繼承的類)沒有合適的繼承類寫object

def__init__

(self, name, score)

:#強制繫結預設屬性 name score

#第乙個引數永遠為self,表示建立的例項本身,即指向每乙個例項

self.__name = name #屬性前加兩個下劃線,變為私有變數,外部不可訪問、修改

self.__score = score#前後都有雙下劃線的是特殊變數,不是private,可以訪問、修改

defget_name

(self)

:#所有內部函式的第乙個變數都是self

return self.__name

defget_score

(self)

:return self.__score

defset_score

(self,new_score):if

0<= new_score <=

100:

self.__score = new_score

else

:return

'請輸入正確的分數'

#以上這種讀寫方式可以用@property和@***.setter得到簡化

bart = student(

'bart simpson',59

)#把屬性綁到bart這個例項身上

bart.age =

8#可以通過這種方式任意繫結屬性 #通過slots限制

lisa = student(

'lisa simpson',87

)lisa.gender =

'female'

#同一類的不同例項可以擁有不同的屬性

print

('%s\'s grade is %s'

%(lisa.__name, lisa.get_grade())

)

class

animal

(object):

defrun

(self)

:print

('animal is running...'

)class

dog(animal)

:#子類可以直接繼承,也可以覆蓋書寫+新增特性

defrun

(self)

:print

('dog is running...'

)def

run_twice

(animal)

:#animal是一種資料型別,dog作為其子類,也屬於animal。即dog也屬於animal的乙個例項

animal.run(

) animal.run(

)class

cat(animal)

:def

run(self)

:print

('cat is running...'

)run_twice(cat())

#只要繼承了animal的型別,就可以不需要修改runtwice函式,直接對子類呼叫即可

#對擴充套件開放:允許新增animal子類

#對修改封閉:不需要修改依賴animal型別的run_twice()等函式

class

timer

(object):

defrun

(self)

:print

('start...'

)run_twice(timer())

#python為動態語言,即使傳入的引數型別不是animal,反正只要是可以執行run.()就可以

使用type()
print

(type

(123))

#返回的是

import types#匯入types模組,可查詢函式/生成器等型別

deffn()

:pass

print

(type

(fn)

==types.functiontype)

print

(type

(abs

)==types.builtinfunctiontype)

print

(type

(lambda x: x)

==types.lambdatype)

print

(type

((x for x in

range(10

)))==types.generatortype)

使用isinstance()

總是優先使用isinstance()判斷型別

class

animal

(object):

pass

class

dog(animal)

:pass

class

husky

(dog)

:pass

a = animal(

)b = dog(

)c = husky(

)print

(isinstance

(c,(animal,dog,husky)))

#滿足三者之一就輸出true

dir()

獲取物件的所有屬性(屬性+方法)

class

testobject

(object):

def__init__

(self)

: self.x =

9def

power

(self)

:return self.x * self.x

obj = testobject(

)#以下為命令列操作,真正python要寫print才有輸出

hasattr

(obj,

'x')

#has attribute屬性,obj是否有 x 屬性?

hasattr

(obj,

'y')

setattr

(obj,

'y',19)

#為obj設定屬性y,且其值為19

getattr

(obj,

'y')

function =

getattr

(obj,

'power'

)function(

)#輸出81

class

student

(object):

name =

'www'

#給student這個類 定義乙個name屬性 具體為乙個字串'www'

s = student(

)print

(s.name)

#s沒有name屬性,會去搜尋類屬性,輸出'www'

s.name =

'bob'

print

(s.name)

#例項的屬性高於類屬性,如果有屬於自己的例項屬性,就不會再去輸出類屬性

#practice

class

student

(object):

count =

0def

__init__

(self,name)

: self.name = name

student.count = student.count +

1#不可以直接count = count+1 count是類屬性,不是乙個單純的「變數」

c 物件導向程式設計 物件導向

什麼是物件導向 是對現實世界理解和抽象的方法。物件導向程式設計的特點 易維護,易擴充套件,靈活性好,重用 類 對事物的抽象定義,即事物具有的共同特徵和行為。物件 即對類進行例項 類是抽象的,物件是具體的 類的定義 語法 訪問修飾符 class 類名類的成員 包括字段,屬性,方法,常量,事件和索引器等...

物件導向程式設計

物件導向程式設計 抽象 封裝 繼承 多型 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因。開放封閉原則 軟體實體應該可以擴充套件,但是不可修改。所有的設計模式都是對不同的可變性進行封裝,從而使系統在不同的角度上達到開發封閉原則。依賴倒轉原則 a 高層不應該依賴低層,兩個都應該依賴抽象。b ...

物件導向程式設計

class team def init self self.name tampa bay buccaneers bucs team print bucs.name tampa bay buccaneers 當呼叫team 函式時,會自動呼叫init函式,self是自動傳入到init中的引數,它指向當...