色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python-類、單例模式

汽車電子技術 ? 來源:程序猿知秋 ? 作者: 程序猿知秋 ? 2023-02-16 15:38 ? 次閱讀

基礎術語

  • 使用 類名() 創建對象,**創建對象 **的動作有兩步
    • 在內存中為對象 分配空間
    • 調用初始化方法 init 為對象初始化
  • 對象創建后,內存中就有了一個對象的** 實例**
  • 通常會把
    • 創建出來的 對象 叫做 的實例
    • 創建對象的 **動作 **叫做 實例化
    • 對象的屬性 叫做** 實例屬性**
  • 在程序執行時
    • 對象各自擁有自己的 實例屬性
    • 調用對象方法,可以通過 self. 訪問自己的屬性或方法
  • 每一個對象 都有一個自己獨立的內存空間,互不干涉
  • 多個對象的方法, 在內存中只有一份 ,在調用方法時,需要把對象的引用傳遞到方法內部

類是一個特殊的對象

  • Python 中 一切皆對象
  • 類是一個特殊的對象,同樣會被加載到內存中,類對象在內存中只有一份
  • 一個類可以創建出多個對象實例
  • 除了封裝** 實例 屬性和方法**外,類對象還可以擁有自己的屬性和方法
  • 通過** 類名.** 的方式可以訪問類的屬性和方法

示例

class Animal:
  # 定義一個 類 屬性
  count=0


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


    Animal.count=Animal.count+1


animal1=Animal("小白")
animal2=Animal("小黑")
animal3=Animal("小綠")


print("查看類屬性的變化次數:%d" %Animal.count)

輸出結果

圖片

類方法

  • **類方法 就是針對 類對象 **定義的方法
    • 類方法 內部可以直接訪問 類屬性 或者調用其他的 類方法
  • 類方法需要用** 修飾器 @classmethod **來標識,告訴解釋器這是一個 類方法
  • 類方法的 第一個參數 應該是 cls
    • 哪一個類調用的方法 ,方法內的 cls就是哪一個類的引用
    • 這個參數和 實例方法的第一個參數 self 類似
    • 不使用 cls ,使用其他名稱也可以,習慣問題
  • 通過 **類名. **調用類方法,不需要傳遞 cls 參數
  • 在方法內部,可以通過** cls.** 訪問類的屬性或類的方法

**語法

**

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

示例

class Animal:
  # 定義一個 類 屬性
  count=0


  def __init__(self,name):
    self.name=name
    Animal.count=Animal.count+1


  # 定義一個 類 方法
  @classmethod
  def show_count(cls):
    print("我是類方法,類屬性的值是:%d"%cls.count)


Animal("小白")
Animal("小黑")
# 調用類 方法
Animal.show_count()

輸出結果

圖片

靜態方法

  • 使用修飾器 @staticmethod 來標識
  • 通過 **類名. **調用 靜態方法
  • 使用場景
    • 不需要訪問** 實例屬性** 或者調用** 實例方法**
    • 不需要訪問** 類屬性** 或者調用 類方法

語法

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

示例

class Person:
  # 定義類屬性
  count=0


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




  # 定義一個靜態方法,靜態方法不能調用 類方法或屬性 與 實例方法或屬性
  @staticmethod
  def static_test():
    print("我是一個靜態方法,不能調用類方法與屬性 和實例方法與屬性")


# 靜態方法直接用 類名調用
Person.static_test()

輸出結果

圖片

綜合練習示例

"""
需求:窗口取票
票數是共有的
每個人取的數量不一樣


操作提示信息,不與任何屬性或方法關聯
"""
class Ticket:
  # 總共 10 張票
  totalTicket=10


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



  # 操作說明,可以使用靜態方法實現
  @staticmethod
  def show_instructions():
    print("操作說明:取票的數量不能超過票總數量!!!")


  # 顯示總票數,可以使用 類方法
  @classmethod
  def show_ticket(cls):
    print("還剩余的票數有:%s 張" %cls.totalTicket)


  # 取票,可以使用實例方法
  def take_ticket(self,num):
    Ticket.totalTicket=Ticket.totalTicket-num
    print("%s 取走了 %d 張票..."%(self.name,num))




# 取票的操作說明 
Ticket.show_instructions()


# 開始取票,張三 取3張, 李四取4張
zs=Ticket("張三")
zs.take_ticket(3)
#查看剩余票數
Ticket.show_ticket()




ls=Ticket("李四")
ls.take_ticket(4)
#查看剩余票數
Ticket.show_ticket()

輸出結果

圖片

單例模式

設計模式

  • **設計模式 **是針對某一特定問題的解決方案,由人們總結和提煉的
  • 使用設計模式 是為了可重用代碼, 使代碼更容易理解,保證代碼可靠性
  • 單例設計模式
    • 目的: 讓類創建的對象,在系統中只有 唯一一個
    • 每一次執行 **類名() **返回的內存地址引用,都是同一個

**__new__方法

**

  • 使用 類名() 創建對象時, Python的解釋器首先會調用** new **方法為對象 分配內存空間
  • Python的解釋器獲得對象的引用后,將引用作為第一個參數,傳遞給 **init **方法
  • 重寫 new 方法的代碼非常固定
  • 重寫 new 方法一定要 return super(). new (cls)
  • 否則 Python的解釋器 得不到對象引用,就不會調用初始化方法
  • **new **是一個 靜態方法 ,在調用時需要 主動傳遞 cls 參數

示例

class SingleClass():


  # 定義類實例對象
  instants=None


  # 重寫 __new__ 方法
  def __new__(cls,*agrs,**kwargs):
    print("創建對象方法.....")

    if SingleClass.instants== None:
      # 初始化實例對象,調用父類方法
      SingleClass.instants=super().__new__(cls)
    return SingleClass.instants

  def __init__(self):
    print("初始化方法。。。。")


# 單例模式 ,不管創建多少次實例,實際上都是同一個
s1=SingleClass()
s2=SingleClass()
s3=SingleClass()
print(s1)
print(s2)
print(s3)

輸出結果

圖片

以上的方法雖然解決了對象只會創建一次的問題,但是初始化的方法還會調用多次,消耗內存。 此處可以 增加一個 initFlag 的標記,一但初始化后就打上標記,以后就不再進行初始化。 改造代碼如下:

class SingleClass():


  # 定義類實例對象
  instants=None


  # 定義一個初始化標記
  initFlag=False


  # 重寫 __new__ 方法
  def __new__(cls,*agrs,**kwargs):    
    if SingleClass.instants== None:
      print("創建對象方法.....")
      # 初始化實例對象,調用父類方法
      SingleClass.instants=super().__new__(cls)
    return SingleClass.instants

  def __init__(self):


    if SingleClass.initFlag:
      return


    print("初始化方法。。。。")
    SingleClass.initFlag=True




# 單例模式 ,不管創建多少次實例,實際上都是同一個
s1=SingleClass()
s2=SingleClass()
s3=SingleClass()
print(s1)
print(s2)
print(s3)

**輸出結果

**

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 內存
    +關注

    關注

    8

    文章

    3037

    瀏覽量

    74148
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17407
  • 空間
    +關注

    關注

    2

    文章

    48

    瀏覽量

    13659
收藏 人收藏

    評論

    相關推薦

    2018年Python面試必看的10個面試題

    )lambda函數默認返回表達式的值。你也可以將其賦值給一個變量。lambda函數可以接受任意個參數,包括可選參數,但是表達式只有一個。5.python如何實現模式?答:
    發表于 07-18 14:52

    如何使用Python? 優勢有哪些?

      Python是一種面向對象的高級語言,因此類對于Python非常重要。是一個空間,在該空間中變量(屬性/方法)分別存儲。運算符' . '用于調用的屬性和方法。
    發表于 07-30 18:08

    請問python-樹莓派如何通過按鍵控制步進電機正反轉?

    步進電機驅動原理是什么?python-樹莓派如何通過按鍵控制步進電機正反轉?
    發表于 10-09 08:45

    python的繼承

    python的繼承的繼承,跟人類繁衍的關系相似。被繼承的稱為基(也叫做父),繼承而得的
    發表于 03-08 16:40

    python-控制khr3hv-master機器人

    python-控制khr3hv機器人,感興趣的小伙伴們可以瞧一瞧。
    發表于 11-22 15:40 ?2次下載

    模式詳解

    是private的話,會不更好的封裝該內呢?我主要是應用在使用普通模擬枚舉類型里,后來發現這就是傳說中的模式。構造函數弄成private 就是
    發表于 09-27 15:10 ?0次下載

    模式分成餓漢模式和懶漢模式解析

    定義:作為對象的創建模式模式確保某一個只有一個實例,而且自行實例化并向整個系統提供這個實例。這個
    發表于 12-11 09:49 ?1651次閱讀

    python-速成指南

    python 提供好用的兩個容器:list 和 dict。插句題外話,其實最好用的容器還是 PHP 提供的關聯數組,一個數組就包括了 python 中 list 和 dict 的全部功能,實在是很贊。
    發表于 03-28 16:32 ?9次下載

    python的繼承詳解

    python的繼承 的繼承,跟人類繁衍的關系相似。 被繼承的稱為基(也叫做父),繼承而
    的頭像 發表于 03-08 16:40 ?3114次閱讀

    Python-字典

    dictionary (字典) **是除列表外** Python **中,最靈活的數據類型
    的頭像 發表于 02-16 15:02 ?643次閱讀
    <b class='flag-5'>Python-</b>字典

    Python的屬性和方法是什么

    編程中我們用來創建對象。日常生活中的汽車設計圖就是我們Python中的。日常生活中的小汽車就是Python中的對象。
    的頭像 發表于 02-23 10:17 ?893次閱讀

    什么是python與對象

    Python中的,type函數查看數據類型
    的頭像 發表于 02-23 10:18 ?786次閱讀

    Python實現模式的五種寫法

    模式(Singleton Pattern) 是一種常用的軟件設計模式,該模式的主要目的是確保某一個
    的頭像 發表于 05-24 11:27 ?490次閱讀

    模式(Singleton Pattern)實現的方法

    模式是指某個只允許存在一個實例對象,例如在打印機打印文件時,一次只允許打印一個文件
    的頭像 發表于 06-01 11:44 ?648次閱讀
    <b class='flag-5'>單</b><b class='flag-5'>例</b><b class='flag-5'>模式</b>(Singleton Pattern)實現的方法

    Python中元的作用

    1.什么是 在理解元之前,我們必須先掌握Python中的(class)。 和大多數語言一樣,Python中的
    的頭像 發表于 11-02 11:18 ?552次閱讀
    <b class='flag-5'>Python</b>中元<b class='flag-5'>類</b>的作用
    主站蜘蛛池模板: 成人中文字幕在线观看| 日韩精品亚洲专区在线电影不卡| 坠落的丝袜美人妻| 全部老头和老太XXXXX| 国偷自产AV一区二区三区健身房| 99久久免费热在线精品| 亚洲激情一区| 日本理伦片午夜理伦片| 久久国产高清字幕中文| 丰满的女友1在线观看| 2021扫黑风暴在线观看免费完整版| 午夜免费国产体验区免费的| 琪琪热热色原日韩在线| 黑人巨茎vide抽搐| 丰满的大白屁股ass| 91精品视频网站| 亚洲国产日韩欧美高清片a| 日本一本二本三区免费免费高清| 牢记永久免费网址| 国内视频在线精品一区| 菲律宾毛片| SM高H黄暴NP辣H调教性奴| 中国农村真实bbwbbwbbw| 亚洲国产精品日本无码网站| 色噜噜2017最新综合| 欧美亚洲日韩自拍高清中文| 狼与美女谐音歌词| 久久久午夜精品福利内容| 果冻传媒2021一二三区| 国产精品无码久久久久不卡| 大咪咪dvd| 成人免费在线观看| www.亚洲天堂| ae58老司机福利| 99re28久久热在线观看| 18禁三级黄| 最好看中文字幕国语| 伊人久久影院大香线蕉| 野草视频在线观看| 亚洲欧美国产旡码专区| 亚洲国产日韩欧美在线a乱码|