標籤: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__()這個方法;
物件導向之內建方法