最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

目標(biāo)

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

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

1.1 術(shù)語 —— 實例

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

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

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

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

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

1.2 類是一個特殊的對象

Python 中 一切皆對象:

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

02. 類屬性和實例屬性

2.1 概念和使用

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

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

class Tool(object):

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

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

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


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

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

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

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

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

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

3.1 類方法

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

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

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

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

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

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

3.2 靜態(tài)方法

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

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

語法如下

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

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

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

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

3.3 方法綜合案例

需求

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

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

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

答案

應(yīng)該定義 實例方法
因為,類只有一個,在 實例方法 內(nèi)部可以使用 類名. 訪問類屬性

class Game(object):

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

  @staticmethod
  def show_help():
    print("幫助信息:讓僵尸走進房間")
    
  @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è)計入門與進階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進階經(jīng)典教程

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

相關(guān)文章

  • 詳解Python如何與?java高效的交互

    詳解Python如何與?java高效的交互

    這篇文章主要為大家介紹了詳解Python如何與java高效的交互的方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 在Linux系統(tǒng)上安裝Python的Scrapy框架的教程

    在Linux系統(tǒng)上安裝Python的Scrapy框架的教程

    這篇文章主要介紹了在Linux系統(tǒng)上安裝Python的Scrapy框架的教程,Scrapy是著名的專門針對搜索引擎的爬蟲制作而研發(fā)的Python框架,需要的朋友可以參考下
    2015-06-06
  • Python類的多繼承的搜索順序

    Python類的多繼承的搜索順序

    python和C++一樣,支持多繼承,本文主要介紹了Python類的多繼承的搜索順序,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Flask使用Pyecharts在單個頁面展示多個圖表的方法

    Flask使用Pyecharts在單個頁面展示多個圖表的方法

    這篇文章主要介紹了Flask使用Pyecharts在單個頁面展示多個圖表的方法,在Flask頁面展示echarts,主要有兩種方法,文中給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2019-08-08
  • 如何更改Pycharm配置文件的存放路徑

    如何更改Pycharm配置文件的存放路徑

    Pycharm配置文件默認(rèn)是放在C盤的,修改存放位置,這樣系統(tǒng)重裝的時候就不會不見了,下面這篇文章主要給大家介紹了關(guān)于如何更改Pycharm配置文件的存放路徑的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • python如何將兩個txt文件內(nèi)容合并

    python如何將兩個txt文件內(nèi)容合并

    這篇文章主要為大家詳細(xì)介紹了python如何將兩個txt文件內(nèi)容合并,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • python中requests模擬登錄的三種方式(攜帶cookie/session進行請求網(wǎng)站)

    python中requests模擬登錄的三種方式(攜帶cookie/session進行請求網(wǎng)站)

    這篇文章主要介紹了python中requests模擬登錄的三種方式(攜帶cookie/session進行請求網(wǎng)站),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python基礎(chǔ)之模塊相關(guān)知識總結(jié)

    Python基礎(chǔ)之模塊相關(guān)知識總結(jié)

    今天帶大家復(fù)習(xí)Python基礎(chǔ)知識,文中對模塊相關(guān)知識介紹的非常詳細(xì),對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Python?OpenCV超詳細(xì)講解調(diào)整大小與圖像操作的實現(xiàn)

    Python?OpenCV超詳細(xì)講解調(diào)整大小與圖像操作的實現(xiàn)

    OpenCV用C++語言編寫,它具有C?++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac?OS,OpenCV主要傾向于實時視覺應(yīng)用,并在可用時利用MMX和SSE指令,本篇文章帶你通過OpenCV實現(xiàn)重調(diào)大小與圖像裁剪
    2022-04-04
  • Python+OpenCV人臉檢測原理及示例詳解

    Python+OpenCV人臉檢測原理及示例詳解

    這篇文章主要為大家詳細(xì)介紹了Python+OpenCV人臉檢測原理及示例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評論

犍为县| 怀集县| 远安县| 卓资县| 当阳市| 东平县| 永安市| 辽阳市| 新乐市| 六枝特区| 清苑县| 东阳市| 娱乐| 内黄县| 景东| 南宁市| 岳池县| 辽阳县| 尚志市| 湾仔区| 赤城县| 巴南区| 东丽区| 高密市| 澎湖县| 车致| 庆安县| 莱芜市| 方山县| 承德县| 沾化县| 民乐县| 北京市| 桐乡市| 固阳县| 西畴县| 甘孜县| 孟津县| 永新县| 肥乡县| 睢宁县|