python 基礎之對象管理

python 基礎之對象管理

1、對象的建立

一、__new__方法的做用

__new__方法用於定義建立對象時執行的操做,__new__方法僅僅爲用戶提供一個建立對象時干預的入口,真正執行建立對象的操做由object類中的__new__方法完成。python

二、__new__方法的定義

定義__new__方法是對 object 類中的方法的重寫,重寫該方法時必須再次調用 object 類中的__new__方法.程序員

def __new__(cls, *args, **kwargs):
    if cls.__instance is None:
        cls.__instance = object.__new__(Printer)
    return cls.__instance

複製代碼

三、__ new__ 方法的調用

__new__方法在建立對象時自動運行,無需手工執行調用該方法。
複製代碼

2、對象的刪除

一、del操做的做用

del操做的實質是斷開變量與內存數據之間的引用,操做del執行後等同於對應變量未進行過定義。app

二、del 操做執行的範圍

1.刪除定義的變量:功能等同於變量未定義
2.刪除存儲模型中的數據:將數據按照變量的形式看待,功能等同於未定義過對應的數據
  • 列表數據報錯:索引不存在
  • 元組對象報錯:元組對象不支持對項的刪除
  • 字典對象報錯:鍵錯誤,鍵不存在
3.對象中的屬性:對應對象等同於該對象未定義過該屬性
三、__del__方法做用

__del__方法用於定義對象不存在任何引用時執行的操做。當對象斷開了與最後一個變量之間的引用關係時,將執行該對象的__new__方法。spa

四、__del__方法執行範圍

1.當手工執行斷開變量與對象的最後一個引用時執行,即del操做code

2.當程序執行完畢時,全部變量對應的引用都斷開,此時執行,即退出程序對象

五、__del__方法調用

__del__方法在對象斷開與最後一個變量之間的引用關係時自動執行,無需手工執行調用該方法。索引

3、對象判等

一、對象判等概念
  • 當兩個對象對應的引用地址相同時,稱這兩個對象是同一個對象。
二、對象判等語法格式
對象引用地址判等:
    對象名 is 對象名  或	變量名 is 變量名
數據引用地址斷定:
    數據 is 數據
注:判等操做的結果是True或False
複製代碼
三、 ==與is的區別
  • ==操做針對斷定的內容不一樣,規則不一樣。例如數值性數據比較數值的大小,不考慮是整數仍是小數。字符串比較字符串的內容是否相同,不考慮引用地址是否相同。
  • is操做只針對地址進行斷定,只要地址相同即返回True,不然返回False

4、單例模式

一、單例模式的做用

控制一個類只能建立出單個實例對象。隊列

二、單例模式書寫規範
class Printer:
    __instance = None

    def __new__(cls, *args, **kwargs):
        if cls.__instance is None:
            cls.__instance = object.__new__(Printer)
        return cls.__instance
複製代碼
三、注意事項
  • 1.定義的類變量要進行私有化,不然能夠經過類名在類的外部訪問到
  • 2.對象的判空操做使用is進行斷定

案例:辦公室打印機

""" 案例:辦公室的打印機 一臺打印機能夠服務於一個辦公室中全部的人,完成他們的打印任務。 分析: 1.打印機:將要打印的任務添加到打印的任務隊列中,真正的打印操做 2.經理:將要打印的操做加入打印機中 3.員工:將要打印的操做加入打印機中 """
class Manager:
    def use_printer(self,info,pr):
        pr.add_task(info)

class Staff:
    def use_printer(self,info,pr):
        pr.add_task(info)

class Printer:
"""典型的單例模式"""
    __instance = None

    def __new__(cls, *args, **kwargs):
    """經過重寫__new__方法來實現只建立一個對象"""
        if cls.__instance is None :
            cls.__instance = object.__new__(Printer)
        return cls.__instance

    def __init__(self,list_print = []):
        self.list_print = list_print

    def add_task(self,info):
        """添加打印信息到打印隊列中"""
        self.list_print.append(info)

    def print(self):
        print(self.list_print)

# 程序員A:
pr1 = Printer()  # 建立打印機對象
m1 = Manager()  # 建立一個經理對象
m1.use_printer("hello",pr1) 

# 程序員B:
pr2 = Printer()
st1 = Staff()
st1.use_printer("itcast",pr2)

# 程序員B1:
pr3 = Printer()
st2 = Staff()
st2.use_printer("itcast666",pr3)

# 程序員C:
pr = Printer()
pr.print()

複製代碼
相關文章
相關標籤/搜索