物件導向之內建方法

來源:互聯網
上載者:User

標籤:pen   方法   lock   自己   block   使用   class   ict   ima   

標籤(空格分隔): 內建方法

物件導向裡的內建方法:

一、isinstance(obj,cls)和issubclass(sub,super)

  • isinstance(obj,cls)檢查是否obj是否是類cls的對象;
    例如:
class Foo(object):    passobj=Foo()isinstance(obj,Foo)
  • issubclass(sub,super)檢查sub類是否是super類的衍生類別
    例如:
class Foo(object):    passclass Bar(Foo):    passissubclass(Bar,Foo)

說一些主要的內建方法:

item系列:查看屬性
class Foo:    def __init__(self,name):        self.name=name            def __getitem__(self,item):#擷取對象的屬性的內建方法,item='name'        return self.__dict__.get(item)            def __setitem__(self,key,value):        print(key,value)    def __delitem__(self,key):        print(key)        obj=Foo('egon')print(obj.__dict__)#以前擷取屬性通過如下的代碼:obj.屬性名稱字#現在擷取屬性,item系列就是把obj類比成字典形式,來訪問obj['name']#自動觸發了__getitem__自動觸發
設定屬性

現在如果要設定屬性呢?比如我們要設定:obj[‘sex‘]=‘male‘只要這樣設定就,會觸發__setitem__

class Foo:    def __init__(self,name):        self.name=name            def __getitem__(self,item):#擷取對象的屬性的內建方法,item='name'        return self.__dict__.get(item)            def __setitem__(self,key,value):        self.__dict__[key]=value    def __delitem__(self,key):        print(key)        obj=Foo('egon')#設定屬性boj['sex']='male'print(obj.__dict__)print(obj.sex)

執行結果為:
[image.png-17.2kB][1]

刪除屬性:
  • del obj.name
    del obj[‘name‘],這個會觸發,上述的__delitem__,so代碼為:
class Foo:    def __init__(self,name):        self.name=name    def __getitem__(self,item):#擷取對象的屬性的內建方法,item='name'        return self.__dict__.get(item)    def __setitem__(self,key,value):        self.__dict__[key]=value    def __delitem__(self,key):        self.__dict__.pop(key)obj=Foo('egon')#刪除屬性del obj['name']print(obj.__dict__)

執行結果:
[image.png-18.6kB][2]

__str__系列:
以前我們說過{‘name‘:‘egon‘}這個字典其實就是本質就是我們 調用dict()這個類,然後把參數傳進來而已,例如:
dict({‘ggname‘:‘egon‘})

如上述我們可以使用:d=dict({‘name‘:‘egon‘})
print(isinstance(d,dict))

執行結果:True
說明:d就是dict的一個執行個體;

  • 對於python內建的類,他們內建配備有列印的功能,列印出來的不是一個對象的地址:
    [image.png-62.5kB][3]

執行結果:
[image.png-29.6kB][4]

如上述我加入了:姓名和年齡,結果列印結果還是實力對象地址:
[image.png-91.1kB][5]
執行結果:
[image.png-19.8kB][6]

如上述的代碼我們可以知道,對象執行個體化的時候對我們有用的屬性有哪些:名字和年齡,那我們就需要定製一個方法,讓他在print()這個對象的時候,就把對我有用的資訊列印出來,這個內建的方法是什麼呢?
是:

__str__方法:
[image.png-78.9kB][7]
其實當我們執行:print(obj)也就等於print(obj.str())

class People:    def __init__(self,name,age):        self.name =name        self.age=age    def __str__(self):        return'<name:%s,age:%s>' %(self.name,self.age)obj =People('egon',18)print(obj)

如上述代碼,在自動調取print(obj)的時候回,回自動去調取__str__這個方法;

del

之前我們學習過操作檔案,

f=open('a.txt')f.read()f.close()

涉及到兩方面的知識:上述代碼的執行原理是;

a.txt是放在硬碟裡面的,程式是不能直接操作硬碟的,程式是通過作業系統,然後有作業系統去操作硬碟的檔案,所以我們在開啟檔案之後,要進行close,目的就是回收作業系統的資源,因為所有的資源不可能讓你一直佔用的;

  • 在你程式關閉之前,把作業系統的資源回收的;
class Open:    def __init__(self,filename):        self.filename=filename    def __del__(self):        print('del....回收作業系統資源,self.close()')f=Open('setttings.py')print('------main-------')#這是python 自動給你執行的del也可以自己執行:del f # f.__del__()
  • 內建的——-del--(),在對象被刪除的時候,python就自動調用__del__()這個方法;

物件導向之內建方法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.