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 初始化...