python面向對象進階
isinstance(obj,cls)檢查是否obj是否是類 cls 的對象。
isinstance(obj,cls)檢查是否obj是否是類 cls 的對象。
反射
python面向對象中的反射:通過字符串的形式操作對象相關的屬性。python中的一切事物都是對象(都可以使用反射)
四個可以實現自省的函數(參數是對象,字符串格式的屬性名)
hasattr
getattr
setattr
delattr
__del__,就是析構方法,當對象在內存中被釋放時,自動觸發執行。
註:此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關心內存的分配和釋放,因為此工作都是交給Python解釋器來執行,所以,析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的。經過查找,Python中沒有專用的構造和析構函數,但是一般可以在__init__和__del__分別完成初始化和刪除操作,可用這個替代構造和析構
__getitem__
__getitem__這種帶雙下劃線方法的特殊性
在本文開頭那個例子中,如果類定義了這個__getitem__方法,那麽對類進行切片時,(以 對象名[‘key‘] 的格式進行操作時,會觸發__getitem__的運行),切片會作為__getitem__的參數傳入,還可以通過start和stop方法獲取到切片的兩個值.
Python中想要使類的實例像list一樣使用下標,可以用__getitem__方法,而配合slice對象則可以實現list一樣的切片
def __setitem__(self,key,value)
return setattr(self,key,value)
def __delitem__(self,key)
return delattr(self,key)
__str__
一、說明:
__init__:類實例初始化函數
__str__:類實例字符串化函數
二、
示例1:
class Friend():
def __init__(self, name):
self.name = name
if __name__ == ‘__main__‘:
friend = Friend(‘Liang‘)
print friend
輸出結果:<__main__.Friend instance at 0x1d92a70>
上面的返回結果是存儲地址, 如何打印出一個對象的有感內容呢? 可以通過__str__函數
實例2:
class Friend():
def __init__(self, name):
self.name = name
def __str__(self):
return "Freind : %s" %self.name
if __name__ == ‘__main__‘:
friend = Friend(‘Liang‘)
print friend
輸出結果: Friend: Liang
python面向對象進階