使用物件導向開發時,第一步是設計類;
當使用 類名() 建立物件時,會自動執行以下操作:
1.為物件在記憶體中分配空間--建立物件;
2.為物件的屬性 設定初始值--初始化方法(init);
物件建立後,記憶體中就有了乙個物件的實實在在的存在--例項;
因此通常也會把:
1.建立出來的物件叫做類的例項;
2.建立物件的動作叫例項化;
3.物件的屬性叫例項屬性;
4.物件呼叫的方法叫例項方法;
在程式執行時:
1.物件各自擁有自己的例項屬性;
2.呼叫物件方法,可以通過self. 訪問自己的屬性/呼叫自己的方法;
結論:1.每乙個物件都有自己的記憶體空間,儲存各自不同的屬性;
2.多個物件的方法,在記憶體中只有乙份,在呼叫方法的時候,需要把物件的引用傳遞到方法內部;
python中,一切皆物件:
class aaa: 定義的類屬於類物件;
obj1 = aaa() 屬於例項物件;
**分層為:
1.類屬性
2.類方法(cls)
3.__init__定義例項屬性
4.例項方法(self)
類屬性就是給類物件定義的屬性;
通常用來記錄與這個類相關的特徵;
類屬性不會用於記錄具體物件的特徵;
定義乙個植物類,每新添一種植物就讓植物類計數+1
class plant(object):
# 使用賦值語句定義類屬性,記錄所有植物物件的數量
count = 0
def __init__(self, name):
self.name = name
# 每初始化一次,就讓類屬性的值+1
plant.count += 1
# 建立植物物件
duorou = plant("多肉")
print("目前已養植物種類數量:", plant.count)
# 目前已養植物種類數量: 1
luhui = plant("蘆薈")
yingtao = plant("櫻桃")
# 輸出植物物件的總數
print("目前已養植物種類數量:", plant.count)
# 目前已養植物種類數量: 3
在python中 屬性的獲取存在乙個向上查詢機制:
1.首先在物件內部查詢物件屬性;
2.沒有找到就會向上查詢類屬性;
注意:如果使用物件.類屬性=值 賦值語句,只會給物件新增乙個屬性,而不會影響到類屬性的值;
可以用 物件.類屬性 檢視類屬性,但不能用 物件.類屬性=值 給它賦值;
如果使用 物件.類屬性=值 賦值語句,只會給物件新增乙個屬性,而不會影響到類屬性的值;
類方法概念和定義語法
類屬性 就是針對類物件定義的屬性;
使用賦值語句在關鍵字class下面可以定義類屬性;
類屬性用來記錄與這個類相關的特徵;
類方法 就是針對類物件定義的方法;
在類方法內部可以直接呼叫類屬性或者其他的類方法;
類方法定義語法如下:
@classmethod
def 類方法名(cls):
pass
類方法需要@classmethod來進行修飾,告訴直譯器這是乙個類方法;
類方法的第乙個引數應該是cls;
由哪乙個類呼叫的類方法,方法內部的cls就是哪乙個類的引用;
這個引數和例項方法的第乙個引數是self類似;
使用其他名稱也可以,但一般習慣使用cls;
通過 類名. 呼叫類方法,呼叫類方法時,不需要傳遞cls引數;
在方法內部,
可以通過 cls. 呼叫類屬性;
通過 cls. 也可以呼叫其他類的方法;
在類方法內部可以直接使用cls 訪問類屬性或者其他的類方法;
類方法案例演示
class plant(object):
# 使用賦值語句定義類屬性,記錄所有植物物件的數量
count = 0
# 定義乙個類方法
@classmethod
def show_count(cls):
print("目前已養植物種類數量:", plant.count)
def __init__(self, name):
self.name = name
plant.count += 1
duorou = plant("多肉")
luhui = plant("蘆薈")
# 呼叫類方法
plant.show_count() # 目前已養植物種類數量: 2
靜態方法概念和語法
在開發時,如果需要在類中定義乙個方法,這個方法:
既不需要訪問例項屬性也不需要呼叫例項方法;
既不需要訪問類屬性也不需要呼叫類方法;
這個時候,就可以把這個方法封裝成靜態方法;
靜態方法語法如下:
@staticmethod
def 靜態方法名():
pass
靜態方法需要修飾器 @staticmethod 來表示,告訴直譯器這是乙個靜態方法;
通過 類名. 呼叫靜態方法;
靜態方法示例
class dog(object):
@staticmethod
def run():
# 不需要訪問類屬性和例項屬性的方法,就可以定義乙個靜態方法
print("跳著跑")
def __init__(self, name):
self.name = name
def bark(self):
pass
# 通過 類名. 呼叫靜態方法,不需要建立物件
dog.run()
案例需求:
1.設計乙個game類
2.屬性:
定義乙個類屬性top_score記錄遊戲最高分
定義乙個例項屬性palyer記錄遊戲玩家名字
3.方法:
靜態方法show_help檢視遊戲幫助資訊;
類方法show_topscore顯示遊戲最高分;
例項方法start_game開始當前玩家的遊戲
4.主程式步驟
檢視幫助資訊
檢視歷史最高分
建立遊戲物件,開始遊戲
案例分析:
歷史最高成績--類屬性
玩家姓名--例項屬性
顯示玩法--靜態方法
顯示歷史最高成績--類方法
進入遊戲--例項方法
綜合案例演練
同時使用類屬性,例項屬性,靜態方法,類方法,例項方法;
class game(object):
top_score = 0
@staticmethod
def game_help():
print("遊戲幫助資訊")
@classmethod
def show_topscore(cls):
print("歷史最高分數是:", cls.top_score)
def __init__(self, name):
self.name = name
def play_game(self):
print("%s 開始遊戲了" % self.name)
# 檢視遊戲幫助文件
game.game_help()
# 檢視歷史最高分
game.show_topscore()
# 建立遊戲物件
xiaoming = game("小明")
# 進入遊戲
xiaoming.play_game()
# 遊戲幫助資訊
# 歷史最高分數是: 0
# 小明 開始遊戲了
python物件導向之類屬性 類方法以及靜態方法
類屬性 針對類物件定義的屬性 使用賦值語句在class關鍵字下可以定義類屬性 類方法 針對類物件定義的方法 在類方法內部可以直接訪問類屬性或者呼叫其他的類方法 class toy object 使用賦值語句 記錄所有的玩具數量 count 0 def init self,name self.name...
python 之 類屬性和類方法
使用面相物件開發,第 1 步是設計類使用類名 建立物件,建立物件的動作有兩步 物件建立後,記憶體中就有了乙個物件的實實在在的存在 例項 因此,通常也會把 建立出來的物件叫做類的例項建立物件的動作叫做例項化物件的屬性叫做例項屬性物件呼叫的方法叫做例項方法 在程式執行時 物件各自擁有自己的例項屬性呼叫物...
Python物件導向 例項屬性和類屬性
由於python是動態語言,根據類建立例項可以任意繫結屬性。給例項繫結屬性的方法是通過例項變數,或者通過self變數 class student object def init self,name self.name name s student jeff print s.name jeff當我們定...