欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python面向?qū)ο笾悓傩院皖惙椒ò咐治?/h1>
 更新時(shí)間:2019年12月30日 11:24:55   作者:小飛俠v科比  
這篇文章主要介紹了python面向?qū)ο笾悓傩院皖惙椒?結(jié)合案例形式分析了Python面相對(duì)象中類屬性和類方法的相關(guān)概念、原理與使用技巧,需要的朋友可以參考下

本文實(shí)例講述了python面向?qū)ο笾悓傩院皖惙椒?。分享給大家供大家參考,具體如下:

目標(biāo)

類的結(jié)構(gòu)
類屬性和實(shí)例屬性
類方法和靜態(tài)方法

01. 類的結(jié)構(gòu)

1.1 術(shù)語 —— 實(shí)例

使用面相對(duì)象開發(fā),第 1 步 是設(shè)計(jì) 類
使用 類名() 創(chuàng)建對(duì)象,創(chuàng)建對(duì)象 的動(dòng)作有兩步:

  1. 在內(nèi)存中為對(duì)象 分配空間
  2. 調(diào)用初始化方法 init 為 對(duì)象初始化
    對(duì)象創(chuàng)建后,內(nèi)存 中就有了一個(gè)對(duì)象的 實(shí)實(shí)在在 的存在 —— 實(shí)例
    在這里插入圖片描述
    因此,通常也會(huì)把:

創(chuàng)建出來的 對(duì)象 叫做 類 的 實(shí)例
創(chuàng)建對(duì)象的 動(dòng)作 叫做 實(shí)例化
對(duì)象的屬性 叫做 實(shí)例屬性
對(duì)象調(diào)用的方法 叫做 實(shí)例方法
在程序執(zhí)行時(shí):

對(duì)象各自擁有自己的 實(shí)例屬性
調(diào)用對(duì)象方法,可以通過 self.
訪問自己的屬性
調(diào)用自己的方法
結(jié)論

每一個(gè)對(duì)象 都有自己 獨(dú)立的內(nèi)存空間,保存各自不同的屬性
多個(gè)對(duì)象的方法,在內(nèi)存中只有一份,在調(diào)用方法時(shí),需要把對(duì)象的引用 傳遞到方法內(nèi)部

1.2 類是一個(gè)特殊的對(duì)象

Python 中 一切皆對(duì)象:

class AAA: 定義的類屬于 類對(duì)象
obj1 = AAA() 屬于 實(shí)例對(duì)象
在程序運(yùn)行時(shí),類 同樣 會(huì)被加載到內(nèi)存
在 Python 中,類 是一個(gè)特殊的對(duì)象 —— 類對(duì)象
在程序運(yùn)行時(shí),類對(duì)象 在內(nèi)存中 只有一份,使用 一個(gè)類 可以創(chuàng)建出 很多個(gè)對(duì)象實(shí)例
除了封裝 實(shí)例 的 屬性 和 方法外,類對(duì)象 還可以擁有自己的 屬性 和 方法
類屬性
類方法
通過 類名. 的方式可以 訪問類的屬性 或者 調(diào)用類的方法
在這里插入圖片描述

02. 類屬性和實(shí)例屬性

2.1 概念和使用

類屬性 就是給 類對(duì)象 中定義的 屬性
通常用來記錄 與這個(gè)類相關(guān) 的特征
類屬性 不會(huì)用于記錄 具體對(duì)象的特征
示例需求

定義一個(gè) 工具類
每件工具都有自己的 name
需求 —— 知道使用這個(gè)類,創(chuàng)建了多少個(gè)工具對(duì)象?
在這里插入圖片描述

class Tool(object):

  # 使用賦值語句,定義類屬性,記錄創(chuàng)建工具對(duì)象的總數(shù)
  count = 0

  def __init__(self, name):
    self.name = name

    # 針對(duì)類屬性做一個(gè)計(jì)數(shù)+1
    Tool.count += 1


# 創(chuàng)建工具對(duì)象
tool1 = Tool("斧頭")
tool2 = Tool("榔頭")
tool3 = Tool("鐵鍬")

# 知道使用 Tool 類到底創(chuàng)建了多少個(gè)對(duì)象?
print("現(xiàn)在創(chuàng)建了 %d 個(gè)工具" % Tool.count)

2.2 屬性的獲取機(jī)制(科普)

在 Python 中 屬性的獲取 存在一個(gè) 向上查找機(jī)制
在這里插入圖片描述
因此,要訪問類屬性有兩種方式:
類名.類屬性
對(duì)象.類屬性 (不推薦)
注意

如果使用 對(duì)象.類屬性 = 值 賦值語句,只會(huì) 給對(duì)象添加一個(gè)屬性,而不會(huì)影響到 類屬性的值

03. 類方法和靜態(tài)方法

3.1 類方法

類屬性 就是針對(duì) 類對(duì)象 定義的屬性
使用 賦值語句 在 class 關(guān)鍵字下方可以定義 類屬性
類屬性 用于記錄 與這個(gè)類相關(guān) 的特征
類方法 就是針對(duì) 類對(duì)象 定義的方法
在 類方法 內(nèi)部可以直接訪問 類屬性 或者調(diào)用其他的 類方法
語法如下

@classmethod
def 類方法名(cls):
  pass

類方法需要用 修飾器 @classmethod 來標(biāo)識(shí),告訴解釋器這是一個(gè)類方法
類方法的 第一個(gè)參數(shù) 應(yīng)該是 cls
由 哪一個(gè)類 調(diào)用的方法,方法內(nèi)的 cls 就是 哪一個(gè)類的引用
這個(gè)參數(shù)和 實(shí)例方法 的第一個(gè)參數(shù)是 self 類似
提示 使用其他名稱也可以,不過習(xí)慣使用 cls
通過 類名. 調(diào)用 類方法,調(diào)用方法時(shí),不需要傳遞 cls 參數(shù)
在方法內(nèi)部
可以通過 cls. 訪問類的屬性
也可以通過 cls. 調(diào)用其他的類方法
示例需求

定義一個(gè) 工具類
每件工具都有自己的 name
需求 —— 在 類 封裝一個(gè) show_tool_count 的類方法,輸出使用當(dāng)前這個(gè)類,創(chuàng)建的對(duì)象個(gè)數(shù)
在這里插入圖片描述

@classmethod
def show_tool_count(cls):
  """顯示工具對(duì)象的總數(shù)"""
  print("工具對(duì)象的總數(shù) %d" % cls.count)

在類方法內(nèi)部,可以直接使用 cls 訪問 類屬性 或者 調(diào)用類方法

3.2 靜態(tài)方法

在開發(fā)時(shí),如果需要在 類 中封裝一個(gè)方法,這個(gè)方法:

既 不需要 訪問 實(shí)例屬性 或者調(diào)用 實(shí)例方法
也 不需要 訪問 類屬性 或者調(diào)用 類方法
這個(gè)時(shí)候,可以把這個(gè)方法封裝成一個(gè) 靜態(tài)方法

語法如下

@staticmethod
def 靜態(tài)方法名():
  pass

靜態(tài)方法 需要用 修飾器 @staticmethod 來標(biāo)識(shí),告訴解釋器這是一個(gè)靜態(tài)方法
通過 類名. 調(diào)用 靜態(tài)方法

class Dog(object):
  
  # 狗對(duì)象計(jì)數(shù)
  dog_count = 0
  
  @staticmethod
  def run():
    
    # 不需要訪問實(shí)例屬性也不需要訪問類屬性的方法
    print("狗在跑...")

  def __init__(self, name):
    self.name = name

3.3 方法綜合案例

需求

設(shè)計(jì)一個(gè) Game 類
屬性:
定義一個(gè) 類屬性 top_score 記錄游戲的 歷史最高分
定義一個(gè) 實(shí)例屬性 player_name 記錄 當(dāng)前游戲的玩家姓名
方法:
靜態(tài)方法 show_help 顯示游戲幫助信息
類方法 show_top_score 顯示歷史最高分
實(shí)例方法 start_game 開始當(dāng)前玩家的游戲
主程序步驟

  1. 查看幫助信息
  2. 查看歷史最高分
  3. 創(chuàng)建游戲?qū)ο?,開始游戲
    在這里插入圖片描述
    案例小結(jié)
    實(shí)例方法 —— 方法內(nèi)部需要訪問 實(shí)例屬性
    實(shí)例方法 內(nèi)部可以使用 類名. 訪問類屬性
    類方法 —— 方法內(nèi)部 只 需要訪問 類屬性
    靜態(tài)方法 —— 方法內(nèi)部,不需要訪問 實(shí)例屬性 和 類屬性
    提問

如果方法內(nèi)部 即需要訪問 實(shí)例屬性,又需要訪問 類屬性,應(yīng)該定義成什么方法?

答案

應(yīng)該定義 實(shí)例方法
因?yàn)椋愔挥幸粋€(gè),在 實(shí)例方法 內(nèi)部可以使用 類名. 訪問類屬性

class Game(object):

  # 游戲最高分,類屬性
  top_score = 0

  @staticmethod
  def show_help():
    print("幫助信息:讓僵尸走進(jìn)房間")
    
  @classmethod
  def show_top_score(cls):
    print("游戲最高分是 %d" % cls.top_score)

  def __init__(self, player_name):
    self.player_name = player_name

  def start_game(self):
    print("[%s] 開始游戲..." % self.player_name)
    
    # 使用類名.修改歷史最高分
    Game.top_score = 999

# 1. 查看游戲幫助
Game.show_help()

# 2. 查看游戲最高分
Game.show_top_score()

# 3. 創(chuàng)建游戲?qū)ο?,開始游戲
game = Game("小明")

game.start_game()

# 4. 游戲結(jié)束,查看游戲最高分
Game.show_top_score()

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 從0到1使用python開發(fā)一個(gè)半自動(dòng)答題小程序的實(shí)現(xiàn)

    從0到1使用python開發(fā)一個(gè)半自動(dòng)答題小程序的實(shí)現(xiàn)

    這篇文章主要介紹了從0到1使用python開發(fā)一個(gè)半自動(dòng)答題小程序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Python實(shí)現(xiàn)快速排序的方法詳解

    Python實(shí)現(xiàn)快速排序的方法詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)快速排序的方法,結(jié)合實(shí)例形式詳細(xì)分析了快速排序的思路、原理及Python具體實(shí)現(xiàn)技巧與相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-10-10
  • 使用tensorboard可視化loss和acc的實(shí)例

    使用tensorboard可視化loss和acc的實(shí)例

    今天小編就為大家分享一篇使用tensorboard可視化loss和acc的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python文件路徑名的操作方法

    Python文件路徑名的操作方法

    對(duì)于文件路徑名的操作在編程中是必不可少的,比如說,有時(shí)候要列舉一個(gè)路徑下的文件,那么首先就要獲取一個(gè)路徑,再就是路徑名的一個(gè)拼接問題,通過字符串的拼接就可以得到一個(gè)路徑名。這篇文章主要介紹了Python中文件路徑名的操作,需要的朋友可以參考下
    2019-10-10
  • python多線程+代理池爬取天天基金網(wǎng)、股票數(shù)據(jù)過程解析

    python多線程+代理池爬取天天基金網(wǎng)、股票數(shù)據(jù)過程解析

    這篇文章主要介紹了python多線程+代理池爬取天天基金網(wǎng)、股票數(shù)據(jù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python實(shí)現(xiàn)倒計(jì)時(shí)小工具

    python實(shí)現(xiàn)倒計(jì)時(shí)小工具

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)倒計(jì)時(shí)小工具,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • python爬取數(shù)據(jù)中的headers和代理IP問題分析

    python爬取數(shù)據(jù)中的headers和代理IP問題分析

    這篇文章主要為大家介紹了python爬取數(shù)據(jù)中的headers和代理IP問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • 深入淺析python定時(shí)殺進(jìn)程

    深入淺析python定時(shí)殺進(jìn)程

    這篇文章主要介紹了深入淺析python定時(shí)殺進(jìn)程的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問題解決

    使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問題解決

    本文主要介紹了使用Pytest.main()運(yùn)行時(shí)參數(shù)不生效問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類

    Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類

    這篇文章主要介紹了Python基礎(chǔ)學(xué)習(xí)函數(shù)+模塊+類,這是基礎(chǔ)學(xué)習(xí)的第三篇內(nèi)容,小編已把前兩篇鏈接放在下面,需要學(xué)習(xí)的同學(xué)可以參考一下
    2022-05-05

最新評(píng)論