日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

面向对象【day08】:类的特殊成员(一)

發布時間:2023/11/27 生活经验 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面向对象【day08】:类的特殊成员(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本節內容

1、__doc__
2、__module__和__class__
3、__init__
4、__del__
5 、__call__
6 、__dict__
7 、__str__
8 、__getitem__、__setitem__、__delitem__

?

  前面我們講了類的方法,有普通方法,就是我們自己定義的方法,還有靜態方法,類方法,屬性方法,其實類還有另外一種方法,叫做類的特殊成員方法

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__

說明:

  1. __module__: 表示當前操作的對象在哪個模塊
  2. __class__:表示當前操作的對象的類是什么

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__)?#表示當前操作的對象在哪個模塊 print(obj.__class__)??#表示當前操作的對象的類是什么 #輸出 lib.aa <class?'lib.aa.C'>

3?__init__

說明:構造方法,通過類創建對象時,自動觸發執行

4 __del__

說明:析構方法,當對象在內存中被釋放時,自動觸發執行

1 2 注:此方法一般無須定義,因為Python是一門高級語言,程序員在使用時無需關心內存的分配和釋放,因為此工作都是交給Python解釋器來執行, 所以,析構函數的調用是由解釋器在進行垃圾回收時自動觸發執行的

5?__call__

說明:?對象后面加括號,觸發執行

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()???#執行__init__ f(1,2,3,name=333)??# 執行call方法,也可以寫成 Foo()(1,2,3,name=333) #輸出 running call (1,?2,?3) {'name':?333}

?注:構造方法的執行是由創建對象觸發的,即:對象 = 類名() ;而對于 __call__ 方法的執行是由對象后加括號觸發的,即:對象() 或者 類()()

6 __dict__

說明:?查看類或對象中的所有成員

①類.__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__方法,那么在打印 對象 時,默認輸出該方法的返回值

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__

說明:用于索引操作,如字典。以上分別表示獲取、設置、刪除數據

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"??#自動觸發__setitem__方法 f["name"]??????#自動觸發__getitem__方法 del?f["name"]??#自動觸發__delitem__方法 #輸出 __setitem__: name shuaigaogao __getitem__: name __delitem__ name

?注:這邊的__delitem__沒有做真正的刪除,只是觸發這個方法,想要真正刪除,只需要在__delitem__函數中添加刪除功能即可

轉載于:https://www.cnblogs.com/luoahong/p/7208395.html

總結

以上是生活随笔為你收集整理的面向对象【day08】:类的特殊成员(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。