第十八天 類和物件 類的定義 物件的建立

2021-10-03 06:47:56 字數 4433 閱讀 3699

2. 類和物件

3 構造和析構

⾯向物件:以⽇常⽣活的⻆度思考問題的解決,更接近⼈的思維⽅式,讓⼈可以從更⾼的層⾯考慮系統的構建

以你請朋友吃飯為例:

面向過程

物件導向

⾃⼰買菜

和朋友⼀塊到飯店

⾃⼰摘菜

叫服務員點菜

⾃⼰洗菜

和朋友⼀塊吃

⾃⼰做菜

和朋友⼀塊吃

⾯向物件的優點:

⾯向物件是⼀種思維⽅式,它認為萬事萬物皆物件,程式是由多個物件協作共同完成功能的,所以以後我們要從⾯向過程轉向⾯向物件。以⾯向物件的⽅式考慮程式的構建。⾯向物件的核⼼是:類和物件

問題->⾯向物件分析(ooa)->發現物件->類->⽤類例項化物件->物件協作完成功能

⽣活⻆度

類: 汽⻋ 超級英雄 電腦 杯⼦

物件: 紅⾊的寶⻢ 美國隊⻓ 桌上的mac pro ⽼王的⿊⾊杯⼦

程式⻆度

類:

成員屬性(成員變數) 描述物件的靜態特徵,諸如,名字、身⾼體重

成員⽅法 描述物件的動態特徵,例如:吃飯、睡覺、打⾖⾖

#語法:

class 類名:

類體

注意:

成員⽅法其實就是函式,作⽤域在類內,成員⽅法的第⼀個引數必須是self,self

代表當前物件,也就是調⽤這個⽅法的物件,這個引數由系統傳遞。

class

dog(

object):

defbark

(self)

:#成員⽅法,第⼀個引數必須是self,代表當前調⽤物件

print

('我是⼩可愛--丁丁')

dingding = dog(

)#例項化⼀個物件

#調⽤⽅法,不需要傳引數,self是系統傳遞的

#調⽤形式: 物件.⽅法([實參])

dingding.bark(

)#等價調⽤形式:bark(dingding)

注意:

⽅法的第⼀個引數self其實可以使任何合法識別符號,不過⼀般約定俗成都是self

⽅法的連貫調⽤

class

dog:

defbark

(self)

:print

("汪汪汪"

)return self #返回self

defeat

(self)

:print

("愛啃⼤⻣頭"

)return self

dog = dog(

)dog.eat(

).bark(

)#⽅法的連貫調⽤,⽅法要返回self

物件的建立過程也稱之為物件的例項化過程,也就是定義了⼀個類型別的變數或者稱之為例項(instance)的過程

#語法: 物件 = 類名([實參])

dingding = dog(

)#例項化⼀個物件

print

(dingding)

#<__main__.dog object at 0x00000000023f40b8>

print

(type

(dingding))#

#檢視物件的類名

print

(dingding.__class__)

成員屬性描述的是物件的靜態特徵,⽐如說狗名字、品種等,其實就是⼀個變數,作⽤域屬於物件,不會和類外的全域性變數衝突。python中成員屬性可以在建構函式中新增。成員屬性屬於物件,每個物件的成員屬性的值都不同

#新增屬性語法:

物件.成員屬性 = 值

#引⽤⽅式:物件.成員屬性

class

dog(

object):

def__init__

(self,name,kind,age)

: self.name = name

self.kind = kind

self.age = age

defbark

(self)

:print

('我是⼩可愛--丁丁'

)dingding = dog(

'丁丁'

,'泰迪',3

)print

('我是可愛的%s⽝,%s,我今年%d歲了'

%(dingding.kind,

dingding.name, dingding.age)

)#檢視例項屬性

print

(dingding.__dict__)

#__dict__屬性可以⽤來檢視例項屬性

print

(dir

(dingding)

)#檢視dog的屬性,包括例項屬性

語法:

def__init__

(self,arg1,arg2...

.): 函式體

#引數:arg1,agr2...根據需要⾃⼰定義

#如果⾃⼰不定義構造⽅法,系統⾃動⽣成⼀個建構函式

def__init__

(self)

:pass

注意:

class 類名:

def__init__

(self)

:pass

class

dog(

object):

def__init__

(self,name,kind,age)

: self.name = name #定義物件屬性,這個類所有的物件都具有該屬性

self.kind = kind #成員屬性必須通過self.引⽤,否則是普通變數

self.age = age

defbark

(tmp)

:print

('我是⼩可愛--丁丁'

)dingding = dog(

'丁丁'

,'泰迪',3

)print

('我是可愛的%s⽝,%s,我今年%d歲了'

%(dingding.kind,

dingding.name, dingding.age)

)

def

__del__

(self)

:#to do

class

dog(

object):

#構造def

__init__

(self,name,kind,age)

: self.name = name

self.kind = kind

self.age = age

#析構def__del__

(self)

:print

('拜拜了,⼆⼗年後⼜是⼀條好漢'

)def

bark

(tmp)

:print

('我是⼩可愛--丁丁'

)dingding = dog(

'丁丁'

,'泰迪',3

)print

('我是可愛的%s⽝,%s,我今年%d歲了'

%(dingding.kind,

dingding.name, dingding.age)

)del dingding #銷毀物件,⾃動調⽤析構⽅法

#在函式中物件,當函式結束運⾏時,⾃動析構

deftest()

: td = dog(

'噹噹'

,'泰迪',3

)

repr作⽤同__str__ ,不過是給直譯器看的

class

animal

:def

__init__

(self,name,age)

: self.name = name

self.__age =age

def__str__

(self)

:return

"name : {} age : {}"

.format

(self.name,self.__age)

def__repr__

(self)

:return self.__str__(

)a1 = animal(

'zhu',3

)print

(a1)

print

('我是⼀頭可愛的 '

+str

(a1)

學python的第十八天

身份運算子區分 驗證 與 身份證,驗證時關注的點 in 17 a out 17 1,2,3 in 18 b out 18 1,2,3 in 19 c out 19 1,2,3 in 20 a c out 20 true in 21 a is c out 21 false 私有屬性,私有方法主要通用 ...

千鋒學習第十八天和十九天 物件導向

物件屬性的增刪改查 查 獲取物件屬性的值 物件.屬性 getattr 物件,屬性名 增 改 物件.屬性 值 setattr 物件,屬性名,值 3.刪除 del 物件.屬性 delattr 物件,屬性名 類方法和靜態方法 1 物件方法 怎麼定義 直接定義 怎麼呼叫 物件.方法名 特點 self 什麼時...

第十八課 物件的構造(中)

class test test t 定義物件並且呼叫建構函式 int main 二 建構函式的呼叫 include class test test int v int main test test int v v 1 test int v v 2 i 100 初始化和賦值不同 int i 1 初始化...