面向对象【day08】:类的特殊成员(一)
本節(jié)內(nèi)容
1、__doc__
2、__module__和__class__
3、__init__
4、__del__
5 、__call__
6 、__dict__
7 、__str__
8 、__getitem__、__setitem__、__delitem__
?
前面我們講了類的方法,有普通方法,就是我們自己定義的方法,還有靜態(tài)方法,類方法,屬性方法,其實類還有另外一種方法,叫做類的特殊成員方法
1 __doc__
說明:表示類的描述信息
| 1 2 3 4 5 6 7 8 9 10 11 | class?Dog(object): ????"""此類是形容Dog這個類"""????#類的描述信息 ????def?__init__(self,name): ????????self.name?=?name print(Dog.__doc__)???#打印類的描述信息 #輸出 此類是形容Dog這個類 |
2 __module__和__class__
說明:
- __module__: 表示當(dāng)前操作的對象在哪個模塊
- __class__:表示當(dāng)前操作的對象的類是什么
aa.py的代碼:
| 1 2 3 4 | class?C(object): ????def?__init__(self): ????????self.name?=?"shuaigaogao" |
index.py的代碼:
| 1 2 3 4 5 6 7 8 9 10 | from?lib.aa?import?C obj?=?C() print(obj.__module__)?#表示當(dāng)前操作的對象在哪個模塊 print(obj.__class__)??#表示當(dāng)前操作的對象的類是什么 #輸出 lib.aa <class?'lib.aa.C'> |
3?__init__
說明:構(gòu)造方法,通過類創(chuàng)建對象時,自動觸發(fā)執(zhí)行
4 __del__
說明:析構(gòu)方法,當(dāng)對象在內(nèi)存中被釋放時,自動觸發(fā)執(zhí)行
| 1 2 | 注:此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關(guān)心內(nèi)存的分配和釋放,因為此工作都是交給Python解釋器來執(zhí)行, 所以,析構(gòu)函數(shù)的調(diào)用是由解釋器在進(jìn)行垃圾回收時自動觸發(fā)執(zhí)行的 |
5?__call__
說明:?對象后面加括號,觸發(fā)執(zhí)行
| 1 2 3 4 5 6 7 8 9 10 11 12 | class?Foo(object): ????def?__init__(self): ????????self.name?=?"shuaigaogao" ????def?__call__(self,?*args,?**kwargs):??#重寫call方法 ????????print("running call",args,kwargs) f?=?Foo()???#執(zhí)行__init__ f(1,2,3,name=333)??# 執(zhí)行call方法,也可以寫成 Foo()(1,2,3,name=333) #輸出 running call (1,?2,?3) {'name':?333} |
?注:構(gòu)造方法的執(zhí)行是由創(chuàng)建對象觸發(fā)的,即:對象 = 類名() ;而對于 __call__ 方法的執(zhí)行是由對象后加括號觸發(fā)的,即:對象() 或者 類()()
6 __dict__
說明:?查看類或?qū)ο笾械乃谐蓡T
①類.__dict__
效果:打印類中所有的屬性,不包括實例屬性
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class?Province(object): ????country?=?'China' ????def?__init__(self, name, count): ????????self.name?=?name ????????self.count?=?count ????def?func(self,?*args,?**kwargs): ????????print("func") print(Province.__dict__)?#類.__dict__ #輸出 {'__doc__':?None,?'__weakref__': <attribute?'__weakref__'?of?'Province'?objects>,?'__init__': <function Province.__init__ at?0x00000247F3CAD488>,?'country':?'China',?'__dict__': <attribute?'__dict__'?of?'Province'?objects>,?'func': <function Province.func at 0x00000247F3CAD510>,?'__module__':?'__main__'}??#打印類中所有的屬性,不包括實例屬性 |
②實例名.__dict__
效果:打印該實例的所有屬性,不包括類屬性
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | class?Province(object): ????country?=?'China' ????def?__init__(self, name, count): ????????self.name?=?name ????????self.count?=?count ????def?func(self,?*args,?**kwargs): ????????print("func") p?=?Province("jiangsu",20000)??#實例化 print(p.__dict__)?#實例名.__dict__ #輸出 {'count':?20000,?'name':?'jiangsu'}??#打印該實例的所有屬性,不包括類屬性 |
7 __str__
說明:如果一個類中定義了__str__方法,那么在打印 對象 時,默認(rèn)輸出該方法的返回值
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class?Province(object): ????country?=?'China' ????def?__init__(self, name): ????????self.name?=?name ????def?__str__(self): ????????return?"<obj:{0}>".format(self.name) p?=?Province("jiangsu") print(p)??#打印這個對象 #輸出 <obj:jiangsu>??#給對象重新起了一個名字 |
注:這個以后會在django框架里面會用到,這邊就不多說了
8 __getitem__、__setitem__、__delitem__
說明:用于索引操作,如字典。以上分別表示獲取、設(shè)置、刪除數(shù)據(jù)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | class?Foo(object): ????def?__getitem__(self, key): ????????print('__getitem__:',key) ????def?__setitem__(self, key, value): ????????print('__setitem__:',key,value) ????def?__delitem__(self, key): ????????print('__delitem__',key) f?=?Foo() f["name"]?=?"shuaigaogao"??#自動觸發(fā)__setitem__方法 f["name"]??????#自動觸發(fā)__getitem__方法 del?f["name"]??#自動觸發(fā)__delitem__方法 #輸出 __setitem__: name shuaigaogao __getitem__: name __delitem__ name |
?注:這邊的__delitem__沒有做真正的刪除,只是觸發(fā)這個方法,想要真正刪除,只需要在__delitem__函數(shù)中添加刪除功能即可
轉(zhuǎn)載于:https://www.cnblogs.com/luoahong/p/7208395.html
總結(jié)
以上是生活随笔為你收集整理的面向对象【day08】:类的特殊成员(一)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 半斤八两电影
- 下一篇: 紫气东来祥瑞香烟多少一包