python学习高级篇(part9)--对象的引用计数
生活随笔
收集整理的這篇文章主要介紹了
python学习高级篇(part9)--对象的引用计数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
學習筆記,僅供參考,有錯必糾
文章目錄
- python 學習高級篇
- 類對象的特殊方法之`__str__()`
- 類對象的特殊方法之`__new__()`
- 對象的引用計數
- 什么是引用計數
- 對象的引用計數加1的情形
- 對象的引用計數減1的情形
python 學習高級篇
# 支持多行輸出 from IPython.core.interactiveshell import InteractiveShell InteractiveShell.ast_node_interactivity = 'all' #默認為'last'
類對象的特殊方法之__str__()
在python的交互式界面中,我們敲入如下代碼
""" >>> class MyClass(object): ... pass ... >>> mc = MyClass() >>> mc <__main__.MyClass object at 0x103f41550> >>> print(mc) <__main__.MyClass object at 0x103f41550> >>> str(mc) '<__main__.MyClass object at 0x103f41550>' >>> repr(mc) '<__main__.MyClass object at 0x103f41550>' """""" >>> class MyClass(object): ... def __str__(self): ... return "__str__被調用" ... >>> mc = MyClass() >>> mc <__main__.MyClass object at 0x103e5c588> >>> print(mc) __str__被調用 >>> str(mc) '__str__被調用' >>> repr(mc) '<__main__.MyClass object at 0x103e5c588>' """""" >>> class MyClass(object): ... def __repr__(self): ... return "__repr__被調用" ... >>> mc = MyClass() >>> mc __repr__被調用 >>> print(mc) __repr__被調用 >>> str(mc) '__repr__被調用' >>> repr(mc) '__repr__被調用' """""" >>> class MyClass(object): ... def __str__(self): ... return "__str__被調用" ... def __repr__(self): ... return "__repr__被調用" ... >>> mc = MyClass() >>> mc __repr__被調用 >>> print(mc) __str__被調用 >>> str(mc) '__str__被調用' >>> repr(mc) '__repr__被調用' """ '\n>>> class MyClass(object):\n... def __str__(self):\n... return "__str__被調用"\n... def __repr__(self):\n... return "__repr__被調用"\n... \n>>> mc = MyClass()\n>>> mc\n__repr__被調用\n>>> print(mc)\n__str__被調用\n>>> str(mc)\n\'__str__被調用\'\n>>> repr(mc)\n\'__repr__被調用\'\n'類對象的特殊方法之__str__()和__repr__()用于自定義并返回實例對象的字符串表示形式
- 當在交互式命令行中直接打印一個實例對象時,如果在實例對象對應的類對象中實現了特殊方法__repr__(),會自動調用該方法;否則,會打印實例對象對應的類對象和實例對象在內存中的地址。
- 當調用內置函數print打印一個實例對象時,如果在實例對象對應的類對象中實現了特殊方法__str__(),會自動調用該方法;否則,如果在實例對象對應的類對象中實現了特殊方法__repr__(),會自動調用該方法;否則,會打印實例對象對應的類對象和實例對象在內存中的地址。
- 當調用內置函數str創建字符串并且實參是一個實例對象時,如果在實例對象對應的類對象中實現了特殊方法__str__(),會自動調用該方法;否則,如果在實例對象對應的類對象中實現了特殊方法__repr__(),會自動調用該方法;否則,會打印實例對象對應的類對象和實例對象在內存中的地址。
- 當調用內置函數repr創建字符串并且實參是一個實例對象時,如果在實例對象對應的類對象中實現了特殊方法__repr__(),在內置函數repr的內部會自動調用該方法;否則,會打印實例對象對應的類對象和實例對象在內存中的地址。
通常情況下,類對象的特殊方法__str__()和__repr__()的實現代碼是一樣的,因此當實現了其中一個后,可以把其方法名賦值給另一個的方法名。
class MyClass(object):def __str__(self):return 'XXX'__repr__ = __str__內置函數str()和repr()都返回對象的字符串表示,其區別在于:
- str()的返回值是給用戶看的,更加用戶友好;
- repr()的返回值是給程序開發者看的,是為調試服務的。
類對象的特殊方法之__new__()
當使用"類名([實參])"創建實例對象時,Python解釋器的主要處理過程包括兩大步:
- 調用特殊方法__new__()創建實例對象:首先會查找該類對象是否實現了特殊方法__new__(),如果沒有實現,則去其父類中依次查找,直到類對象object;特殊方法__new__()會返回創建的實例對象.
- 調用特殊方法__init__()對創建的實例對象進行初始化,__new__()返回的實例對象會作為實參被自動傳遞給__init__()的第一個形參self.
對象的引用計數
什么是引用計數
通常情況下,開發人員無需關心內存的分配和釋放。當創建一個對象時,系統會自動分配一塊內存以存儲該對象的信息。當該對象不再被使用時,系統會進行垃圾回收以自動釋放掉其占用的內存。
為了確保使用中的對象不會被銷毀,Python使用引用計數來跟蹤和計算內存中每個對象被引用的次數。當對象的引用計數為0時,它才可以被銷毀。
對象的引用計數加1的情形
對象賦值給變量
引用對象的變量賦值給另一個變量
對象作為容器(例如:列表、元組、集合等)中的元素
對象作為函數調用時的實參
對象的引用計數減1的情形
總結
以上是生活随笔為你收集整理的python学习高级篇(part9)--对象的引用计数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 济南房贷利率
- 下一篇: python学习高级篇(part10)-