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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

类中的特殊方法

發(fā)布時(shí)間:2025/7/25 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类中的特殊方法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類中的特殊方法

?1,類名()自動(dòng)執(zhí)行__init__ :

作用:初始化實(shí)例的變量

2,對(duì)象()自動(dòng)執(zhí)行__call__ :

# __call__ 實(shí)例執(zhí)行的時(shí)候會(huì)執(zhí)行此方法 class Foo:def __call__(self, *args, **kwargs):print(args,kwargs)
     return 123 #__call__方法還有返回值 obj=Foo() obj(22,33,k1=222)
ret=obj(22,33) #在這里可以接收下返回值

3,對(duì)象 [“xxx” ]? 自動(dòng)執(zhí)行__getitem__ :

class Foo:def __getitem__(self, item):print(111)return item obj=Foo() ret=obj['yu'] #可以通過這種方法把自己定義的類的實(shí)例做成類似列表的功能 print(ret)

  

4,對(duì)象 [“xxx” ] ==123 自動(dòng)執(zhí)行__setitem__ :  

class Foo:def __setitem__(self, item):print(111)return item obj=Foo() obj["k1"]=123 #這個(gè)是沒有返回值的,在語法上就不允許,如果接收ret= obj["k1"]=123,就表示兩個(gè)都等于123?這顯然不是

5, del? ? 對(duì)象 [“xxx” ]? 自動(dòng)執(zhí)行__delitem__ : 

class Foo:def __setitem__(self, key):print(111)#這個(gè)方法沒有返回值 obj=Foo() del obj["k1"]

6,對(duì)象+對(duì)象? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#相應(yīng)的語法就對(duì)應(yīng)了面向?qū)ο笾械奶厥獾姆椒?#xff0c;面向?qū)ο笾械奶厥夥椒ê芏?/p> class Foo():def __init__(self,a1,a2):self.a1=a1self.a2=a2def __add__(self, other):return self.a1 + other.a2obj1=Foo(1,2) obj2=Foo(88,99) ret=obj1+obj2 print(ret)

7,with 對(duì)象

class Foo():def __init__(self,a1,a2):self.a1=a1self.a2=a2def __enter__(self):print(11111)def __exit__(self, exc_type, exc_val, exc_tb):print(2222)obj1=Foo(1,2) obj2=Foo(88,99)with obj1: #pass #要點(diǎn),只要with遇到一個(gè)對(duì)象,就會(huì)立馬執(zhí)行類中的__enter__方法和__exit__方法,所以即便這里用占位符pass,類中的兩個(gè)方法也會(huì)執(zhí)行的
   print("hello word") #當(dāng)然在進(jìn)入和退出之間也可以寫一些自己的代碼塊

?

class Foo():def __init__(self,a1,a2):self.a1=a1self.a2=a2def __enter__(self):print(11111)return 666def __exit__(self, exc_type, exc_val, exc_tb):print(2222)obj1=Foo(1,2) obj2=Foo(88,99)with obj1 as f: #在這里可以寫一個(gè)as f 來接收一下__enter__方法的返回值print(f) print("hello word") #

8 正真的構(gòu)造方法

class Foo():def __init__(self,a1,a2):print(1)self.a1=a1self.a2=a2def __new__(cls, *args, **kwargs):print(2)pass Foo(1,2) #__new__方法執(zhí)行了,但是__init__方法沒有執(zhí)行,是因?yàn)開_new__方法必須返回會(huì)一個(gè)值,對(duì)象才能創(chuàng)建

?

要想l兩個(gè)方法都執(zhí)行必須給__new__方法設(shè)置返回值

class Foo():def __init__(self,a1,a2):print(1)self.a1=a1self.a2=a2def __new__(cls, *args, **kwargs):return object.__new__(cls) #所有的對(duì)象都是object創(chuàng)建的,因?yàn)樗械膶?duì)象都繼承自object,#所以創(chuàng)建對(duì)象的過程是這樣的,object 創(chuàng)建一個(gè)空的當(dāng)前類的對(duì)象,然后,__init__#做初始化,再給對(duì)象里面填值 Foo(1,2)#在其他語言中的構(gòu)造方法是合在一起的,python中把他分開了,兩個(gè)功能不一樣 #所以一般這樣說__init__是初始化方法 # __new__是構(gòu)造方法

  

  

  

  

  

  

?

轉(zhuǎn)載于:https://www.cnblogs.com/zhuhaofeng/p/9563000.html

總結(jié)

以上是生活随笔為你收集整理的类中的特殊方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。