色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美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

    文章

    3052

    瀏覽量

    74214
  • 對象
    +關注

    關注

    1

    文章

    38

    瀏覽量

    17412
  • 空間
    +關注

    關注

    2

    文章

    48

    瀏覽量

    13675
收藏 人收藏

    評論

    相關推薦

    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 ?1656次閱讀

    python-速成指南

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

    python的繼承詳解

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

    Python-字典

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

    Python的屬性和方法是什么

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

    什么是python與對象

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

    Python實現模式的五種寫法

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

    模式(Singleton Pattern)實現的方法

    模式是指某個只允許存在一個實例對象,例如在打印機打印文件時,一次只允許打印一個文件
    的頭像 發表于 06-01 11:44 ?665次閱讀
    <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 ?566次閱讀
    <b class='flag-5'>Python</b>中元<b class='flag-5'>類</b>的作用
    主站蜘蛛池模板: 少妇内射视频播放舔大片 | 偷窥国产亚洲免费视频 | 亚洲成色WWW久久网站夜月 | 97在线视频免费播放 | 果冻传媒在线观看视频 | 夜夜狂射影院欧美极品 | 6080伦理久久亚洲精品 | 亚洲人成无码久久久AAA片 | 涩涩在线观看免费视频 | 伦理 电影在线观看百度影音 | 青青青手机视频 | 日日碰狠狠躁久久躁综合网 | 亚洲综合视频 | 色视频色露露永久免费观看 | 纯肉小黄文高H | mm625亚洲人成电影网 | 亚洲欲色欲色XXXXX在线AV | 国产精品自在在线午夜蜜芽tv在线 | 肉肉描写很细致的黄文 | 2021精品高清卡1卡2卡3麻豆 | 亚洲AV无码国产精品色在线看 | 最新无码专区在线视频 | 美女的避毛 | 视频成人永久免费视频 | 国产精品看高国产精品不卡 | 99久久爱re热6在线播放 | 亚洲日韩乱码人人爽人人澡人 | 24小时日本在线观看片 | 国产午夜精品一区二区三区 | 无码爽死成人777在线观看网站 | 99精品免费久久久久久久久蜜桃 | 在线观看中文字幕码2021不用下载 | 九九久久国产精品大片 | 性盈盈剧场 | 亚洲欧美自拍清纯中文字幕 | 狠狠久久免费视频在线 | 外国三级片名 | 国产高清在线露脸一区 | 法国剧丝袜情版h级在线电影 | 日韩欧美精品有码在线播放免费 | 三级黄色在线观看 |