python基礎之類中常見內建方法
阿新 • • 發佈:2018-12-05
一、__del__(self): 物件消失的時候呼叫此方法。
>>> class cat(object): def __del__(self): print("物件消失") >>> import sys >>> cat1=cat() #建立一個cat1 >>> sys.getrefcount(cat1) #測試物件的引用個數,比實際大1,此時為2 2 >>> cat2=cat1 #又建立了一個引用,此時為3 >>> sys.getrefcount(cat1) 3 >>> sys.getrefcount(cat2) 3 >>> del cat1 #刪除了一個引用,cat1 不在指向物件,cat2還指向物件,此時引用個數為2 >>> sys.getrefcount(cat2) 2 >>> del cat2 #又刪除了一個,此時沒有引用指向物件,物件消失,呼叫__del__()方法 物件消失
二、類方法 @classmethod
>>> class test(object): def show(self): print("This is a class") @classmethod #定義類方法 def way(cls): print("This is a class method") >>> a=test() >>> a.way() #用物件呼叫類方法 This is a class method >>> test.way() #用類呼叫類方法 This is a class method
三、靜態方法:@staticmethod ,一般用於既和類沒關係也和物件沒關係的使用
>>> class test(object): def show(self): print("This is a class") @staticmethod #定義靜態方法 def way( ): #可以沒有引數 print("This is a static method") >>> a=test() >>> a.way() #物件呼叫 This is a static method >>> test.way() #類呼叫 This is a static method
四、__new__( )方法:靜態方法,用於建立物件,__init__( )用於物件的初始化
>>> class test(object):
def show(self):
print("This is show function")
>>> a=test() #呼叫__new__()方法來建立物件,然後用一個變數來接收__new__()方法的返回值,這個返回值是創建出來物件的引用。呼叫__init__()方法來初始化物件。
子類中重寫__new__( )方法,要呼叫父類__new__( )方法,要返回物件的引用,物件才能被建立。
重寫__new__( )方法,可以建立單例
<一>沒返回,沒呼叫父類__new__()方法
>>> class shit(object):
def show(self):
print("-----show----")
def __new__(cls):
print("重寫new方法")
>>> a=shit()
重寫new方法
>>> a.show() #沒有呼叫父類__new__(cls)方法,報錯
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
a.show()
AttributeError: 'NoneType' object has no attribute 'show'
<二> 呼叫父類的__new__(cls)方法,沒有返回
class shit(object):
def show(self):
print("-----show----")
def __new__(cls):
print("重寫new方法")
object.__new__(cls)
>>> a=shit()
重寫new方法
>>> a.show()
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
a.show()
AttributeError: 'NoneType' object has no attribute 'show'
<三> 有返回,呼叫父類__new__()方法
>>> class shit(object):
def show(self):
print("-----show----")
def __new__(cls):
print("重寫new方法")
return object.__new__(cls) #呼叫父類的__new__(cls)方法
>>> a=shit()
重寫new方法
>>> a.show()
-----show----