1. 程式人生 > >python面向對象進階

python面向對象進階

參數 tar pri 析構 getattr 實例初始化 pan bsp clas

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面向對象進階