日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

类中的特殊方法

發布時間:2025/7/25 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 类中的特殊方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

類中的特殊方法

?1,類名()自動執行__init__ :

作用:初始化實例的變量

2,對象()自動執行__call__ :

# __call__ 實例執行的時候會執行此方法 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,對象 [“xxx” ]? 自動執行__getitem__ :

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

  

4,對象 [“xxx” ] ==123 自動執行__setitem__ :  

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

5, del? ? 對象 [“xxx” ]? 自動執行__delitem__ : 

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

6,對象+對象? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#相應的語法就對應了面向對象中的特殊的方法,面向對象中的特殊方法很多

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 對象

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 #要點,只要with遇到一個對象,就會立馬執行類中的__enter__方法和__exit__方法,所以即便這里用占位符pass,類中的兩個方法也會執行的
   print("hello word") #當然在進入和退出之間也可以寫一些自己的代碼塊

?

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: #在這里可以寫一個as f 來接收一下__enter__方法的返回值print(f) print("hello word") #

8 正真的構造方法

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__方法執行了,但是__init__方法沒有執行,是因為__new__方法必須返回會一個值,對象才能創建

?

要想l兩個方法都執行必須給__new__方法設置返回值

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

  

  

  

  

  

  

?

轉載于:https://www.cnblogs.com/zhuhaofeng/p/9563000.html

總結

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

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