python - 面向物件 類的概念
阿新 • • 發佈:2019-01-03
java c++ python(都是面向物件的語言, c是面向過程的語言)
面向過程:1—>2
—>3—>4 怎麼做
面向物件:4 誰來做
相對於函式來說是一個更大的封裝,根據職責將物件所能實現的功能封裝到一起
1.確定物件要做的事情(方法->多個)
2.讓物件呼叫方法
植物大戰殭屍
物件:向日葵 豌豆射手 殭屍
屬性:生命值 生命值 生命值
方法:生產陽光() 發射子彈() 移動()
搖搖晃晃() 咬()
類:是一群具有相同特徵和行為事物的一個統稱(抽象的–>不能直接使用)
特徵:被稱為屬性
行為:被稱為方法
物件:由類創建出來的一個具體的存在,由哪一個類創建出來的
物件,就擁有哪一個類中定義的方法和屬性
先有類–>再有物件
類和物件的關係:
類是模板,物件是根據這個模板創建出來的,先有類再有物件
類只需要有一個,物件可以有很多個
不同物件(由同一類創建出來的物件)之間的屬性可以不相同
類中定義了什麼屬性和方法,使用這個類創建出來的物件就有什麼
屬性和方法,不可能多也不可能少
類的設計 1.類名:這類事物的名字(大駝峰命名法) 大駝峰命名法 1.每一個單詞的首字母大寫 2.單詞與單詞之間沒有下劃線 2.屬性:這個類創建出來的物件有什麼樣的特徵 3.方法:這個類創建出來的物件有什麼樣的行為
類名的確定
名詞提煉法分析整個業務流程,出現的名詞,通常就是找到的類
屬性和方法的確定
對 物件的特徵描述,通常可以定義成屬性
物件具有的行為(動詞),通常可以定義為方法
提示:需求中沒有涉及的屬性或方法在設計類時,不需要考慮
類、屬性、方法為了加以區分,舉幾個簡單的例子:
練習1:
需求:
小明今年18歲,身高1.75,每天早上要跑步,小明吃東西
小美今年17歲,身高1.65 小美不跑步,小美吃東西
類:Person
屬性:name age height
方法:run()
eat()
練習2:
一隻黃顏色的狗狗叫大黃
看見生人旺旺叫
看見家人搖尾巴
類:Dog 屬性:color name 方法:shake shout
分清了類、屬性、方法後運用到具體程式設計裡:
題目:貓愛吃魚,貓要喝水
# 哪一個物件呼叫的方法,self就是哪一個物件的引用(面試常考)
# 在類封裝方法的內部,self就表示當前呼叫方法的物件自己
# 在的方法內部 可以通過 self.屬性 來訪問物件的屬性
class Cat:
def eat(self):
print('貓愛吃魚')
def drink(self):
print('貓要喝水')
tom = Cat()
print(tom)
tom.eat()
tom.drink()
輸出:
<__main__.Cat object at 0x7f7231eef588>
貓愛吃魚
貓要喝水
class Cat:
def eat(self):
print('%s 愛吃魚' %(self.name))
def drink(self):
print('貓要喝水')
# 建立貓物件
tom = Cat()
# 在類的外部 物件.屬性 可以給物件新增屬性
# 不推薦使用
# 物件包含哪些方法,應該封裝在類中
tom.name = 'Tom'
print(tom)
addr = id(tom)
print(addr)
# %x:列印格式為十六進位制
print('%x' %(addr))
# %d:列印格式為十進位制
print('%d' %(addr))
tom.eat()
tom.drink()
輸出:
<__main__.Cat object at 0x7fb8de2c35f8>
140431978149368
7fb8de2c35f8
140431978149368
Tom 愛吃魚
貓要喝水
# 可以再建立一個貓物件
lazy_cat = Cat()
lazy_cat.name = 'miaomiao'
print(lazy_cat)
lazy_cat.eat()
lazy_cat.drink()
lazy_cat2 =lazy_cat
print(lazy_cat2)
輸出:
<__main__.Cat object at 0x7fb8de2c3668>
miaomiao 愛吃魚
貓要喝水
<__main__.Cat object at 0x7fb8de2c3668>