類:是乙個特殊的物件,class a:定義的類屬於 類物件
類的例項:obj = a()屬於 例項物件
例項屬性:__init__定義例項屬性
例項方法:(self),物件名.方法名
類屬性:針對類物件定義的屬性,訪問類屬性方法:類名.類屬性/物件名.類屬性
類方法:針對類物件定義的方法,內部可直接訪問類屬性和其他類方法;類名.方法名
靜態方法:不需要訪問例項屬性、類屬性,也不用呼叫例項方法、類方法
私有屬性:物件不希望公開的屬性,訪問私有屬性:物件名._類名.__私有屬性
私有方法:物件不希望公開的方法,訪問私有方法(無法直接呼叫):物件名._類名.__私有方法
1.封裝例項應用
需求:房子(house) 有 戶型、總面積 和 家具名稱列表
新房子沒有任何的家具
家具(houseitem) 有 名字 和 占地面積,其中
席夢思(bed) 占地 4 平公尺
衣櫃(chest) 占地 2 平公尺
餐桌(table) 占地 1.5 平公尺
將以上三件 家具 新增 到 房子 中
列印房子時,要求輸出:戶型、總面積、剩餘面積、家具名稱列表
class game:
# 定義乙個類屬性
top_score = 0
def __init__(self, player_name):
"""定義乙個例項屬性
:param player_name:
"""self.player_name = player_name
@staticmethod
def show_help():
"""定義乙個靜態方法"""
print("遊戲幫助資訊")
@classmethod
def show_top_score(cls):
"""定義乙個類方法
:return:
"""print("玩家最高分為{}".format(cls.top_score))
def start_game(self):
"""定義乙個例項方法
:return:
"""print("{}開始遊戲了~".format(self.player_name))
game.top_score = 999
game.show_help() # 類名.靜態方法
game.show_top_score() # 類名.類方法
game = game("小明") # 建立物件,例項化
game.start_game() # 物件名.方法名()--例項方法
game.show_top_score()
----------------------------------------
#遊戲幫助資訊
#玩家最高分為0
#小明開始遊戲了~
#玩家最高分為999
需求:
士兵 zaygee 有一把 ak47
士兵 可以 **
槍 能夠 發射 子彈
槍 裝填 裝填子彈 —— 增加子彈數量
class gun:
def __init__(self, model):
# 槍型號
self.model = model
# 子彈數量
self.bullet_count = 0
def add_bullet(self, count):
# 填充子彈
self.bullet_count += count
def shoot(self):
if self.bullet_count <= 0:
print("沒有子彈,等死吧。。。")
return
# 發射子彈
self.bullet_count -= 1
print("{}剩餘子彈{}".format(self.model, self.bullet_count))
class soldier:
def __init__(self, name):
self.name = name
self.gun = none
def fire(self):
if self.gun is none:
print("沒有槍,不敢上")
return
print("衝啊...{}".format(self.name))
self.gun.add_bullet(30)
self.gun.shoot()
ak47 = gun('ak47')
soldier = soldier("zaygee")
soldier.gun = ak47 # 把槍分配給士兵
soldier.fire()
-------------------------
#衝啊...zaygee
#ak47剩餘子彈29
2.繼承與多型應用例項
需求:1.在 dog 類中封裝方法 game
普通狗只是簡單的玩耍
2.定義 xiaotiandog 繼承自 dog,並且重寫 game 方法
哮天犬需要在天上玩耍
3.定義 person 類,並且封裝乙個 和狗玩 的方法
在方法內部,直接讓 狗物件 呼叫 game 方法
class dog:
def __init__(self, name):
self.name = name
def game(self):
print("{}在街上溜達".format(self.name))
class xiaotiandog(dog):
def game(self):
print("{}在天上飛".format(self.name))
class person:
def __init__(self, name):
self.name = name
def play_with_dog(self, dog):
print("{}和{}在快樂的玩耍".format(self.name, dog.name))
dog.game()
wangcai = xiaotiandog("哮天犬") # 建立乙個狗物件
zaygee = person("zaygee") # 建立乙個人物件
zaygee.play_with_dog(wangcai) # 人遛狗
--------------------------
#zaygee和哮天犬在快樂的玩耍
#哮天犬在天上飛
3.私有屬性&私有方法
class man:
def __init__(self, name):
self.name = name
self.__age = 18
def __secret(self):
return "我的年齡是{}".format(self.__age)
zaygee = man("zaygee")
print(zaygee.name)
# 訪問私有屬性:物件名._類名.__私有屬性
print(zaygee._man__age)
# 訪問私有方法(無法直接呼叫):物件名._類名.__私有方法
print(zaygee._man__secret())
--------------------------
#zaygee
#18#我的年齡是18
python之物件導向
python中一切皆物件 class 定義的類屬於類物件 obj1 屬於例項物件 在程式執行時,類同樣會載入到記憶體,類物件在記憶體中只有乙份,使用乙個類可以建立出很多例項物件 除了封裝例項的屬性和方法外,類物件還可以擁有自己的屬性和方法 類屬性和例項屬性 類屬性就是給類物件中定義屬性,通常用來記錄...
python之物件導向
物件導向介紹 一 物件導向和面向過程 面向過程 核心過程二字,過程即解決問題的步驟,就是先幹什麼後幹什麼 基於該思想寫程式就好比在這是一條流水線,是一種機械式的思維方式 優點 複雜的過程流程化 缺點 擴充套件性差 物件導向 核心是物件二字,物件指特徵與技能的結合體 基於該思想編寫程式就好比在創造乙個...
Python之物件導向 物件導向基礎
一 面向過程 物件導向對比 1 面向過程 根據業務邏輯從上到下寫壘 2 函式式思想 將某功能 封裝到函式中,日後便無需重複編寫,僅呼叫函式即可 3 物件導向 對函式進行分類和封裝 1 2 3一步一步抽象,函式式是走向物件導向的中間步驟 函式式的應用場景 各個函式之間是獨立且無共用的資料 物件導向程式...