物件管理
__new__方法
- new()方法用於定義建立物件時執行的操作
- object類中的__new__()方法完成福相建立過程中的記憶體空間申請,物件屬性初始化等一系列的操作。
class User:
def __new__(cls,*args,**kwargs):
print("user new method is running")
instance.obkect.__new__(User)
return.instance
複製程式碼
- new()方法建立物件時自動執行。
- 覆蓋object類中的__new__方法後建立物件將執行覆蓋後的方法
- new()方法僅僅是python開放出來給使用者敢於建立物件時的一個操作入口,該方法並不是直接完成分配記憶體、建立物件的操作,建立物件的操作由python底層操作統一管理。
物件的刪除
- del操作用於從記憶體中刪除對應的變數,並斷開變數與物件間的引用關係
- 物件操作執行範圍
- 刪除定義的變數:功能等同於變數未定義
a = 100
del a
print(a)
NameError: name'a' is not defined
複製程式碼
- 刪除儲存模型中的資料:將資料按照變數的形式看待,功能等同於未定義過對應的資料
- 列表資料包錯:索引不存在
list1 = [1,2,3]
del list[2]
print(list[2])
# 報錯
IndexError:list index out of range
- 元組物件報錯:元組物件不支援對項的刪除
tupel1 = (1,2,3)
del tuple1[2]
ptint(tuple1[2])
#報錯
TypeError:'tuple' object doesn't support item deletion
- 字典物件報錯:鍵錯誤,鍵不存在
dict1 = {"a":1,"b":2}
del dict1["a"]
print(dict1["a"])
#報錯
KeyError:'a'
- 物件中的屬性:對應物件等同於該物件為定義過該屬性
class User:
def __init__(self,name,age):
self.name = name
self.age = age
u1 = User("張三",18)
del u1.name
print(u1.name)
#報錯
AttributeError:'User' object has no attribute 'name'
複製程式碼
- __del__方法用於定義物件不存在任何引用時執行的操作。當物件斷開了與最後一個變數之間的引用關係時,將執行該物件的__new__方法。
- 當手工執行斷開變數與物件的最後一個引用時執行,即del操作。
- 當程式執行完畢時,所有變數對應的引用都斷開,此時執行,即退出程式
- __del__防範在物件斷開與最後一個變數之間的引用關係時自動執行,無需手工執行呼叫該方法。
物件判等
- 當兩個物件對應的引用地址相同時,稱這兩個物件時同一個物件。
- 物件判等語法格式
- 物件引用地址判等:
物件名 is 物件名 或 變數名 is 變數名
複製程式碼
資料 is 資料
複製程式碼
- 注:判等操作的結果是True或False
- ==與is 的區別
- ==操作針對判定的內容不同,規則不同。例如數值型資料比較數值的大小,不考慮是整數還是小數。字串比較字串的內容是否相同,不考慮引用地址是否相同。
- is操作只針對地址進行判定,只要地址相同即返回True,否則返回False
單例模式
- 單例模式的作用
- 控制一個類智慧創造出單個例項物件
- 單例模式書寫規範
class 類名:
__instance = None
def __new__(cls,*args,**kwargs):
if cls.__instance is None:
cls.__instance =object.__new__(類名)
return cls.__instance
複製程式碼
- 定義的類變數要進行私有化,否則可以通過類名在類的外部訪問到
- 物件的判空操作使用is進行判定