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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...

發布時間:2025/3/21 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

雙下方法

雙下方法是開發python這個語言程序員用的,源碼中使用的.

我們不能輕易使用雙下方法.可能重新寫object的源碼,慎用!!!

雙下方法特征:你不知道干啥了,就會觸發某個雙下方法

len

class B:

def__len__(self):

print("666")

return 555

b=B()

len(b)

打印結果如下

666

hash

class A:

pass

obj=A()

print(obj)

打印結果如下

可哈希值

str

優先級高于repr

class A:

def __init__(self,name,age):

self.name=name

self.age=age

def __str__(self):

return f"姓名:{self.name}年齡{self.age}"

a=A("sykrabbit ",20)

print(a)

打印結果如下

姓名:sykrabbit 年齡20

repr

優先級低于str

必須有return

class A:

def __init__(self,name,age):

self.name=name

self.age=age

def __repr__(self)

print(66)

打印結果如下

66

call

對象()自動觸發對象從屬于類(父類)的__call__方法

object沒有call方法

class Foo:

def __init__(self):

pass

def __call__(self, *args, **kwargs):

print('__call__')

obj = Foo() # 執行 __init__

obj() # 執行 __call__

打印結果如下

__call__

eq

比較大小

class A:

def __init__(self,name,age):

self.name=name

self.age=age

def __eq__(self,obj):

if self.a == obj.a and self.b == obj.b:

return True

a = A()

b = A()

print(a == b)

打印結果如下

True

del

析構方法

class A:

def __del__(self):

print(666)

obj=A()

打印結果如下

666

new

在內存當中開辟一個空間產生對象

class A:

def __init__(self):

self.x = 1

print('in init function')

def __new__(cls, *args, **kwargs):

print('in new function')

return object.__new__(A, *args, **kwargs)

#對象是object類的__new__方法 產生了一個對象

a = A()

#類名()

#1.先觸發object的__new__方法,此方法在內存中開辟一個對象空間

#2.先執行__init__方法,給對象封裝屬性

print(a.x)

打印結果如下

in new function

in init function

單例模式

單例模式會阻止其他對象實例化其自己的單例對象的副本,從而確保所有對象都訪問唯一實例。

一個類只允許實例化一個對象

__item__系列

進行類型字典的增刪改查

class Foo:

def __init__(self,name):

self.name=name

def __getitem__(self, item):

print(self.__dict__[item])

def __setitem__(self, key, value):

self.__dict__[key]=value

def __delitem__(self, key):

print('del obj[key]時,我執行')

self.__dict__.pop(key)

def __delattr__(self, item):

print('del obj.key時,我執行')

self.__dict__.pop(item)

f1=Foo('sb')

f1['age']=18

f1['age1']=19

del f1.age1

del f1['age']

f1['name']='alex'

print(f1.__dict__)

上下文管理器相關

enter __exit__都是成對的出現

# 如果想要對一個類的對象進行with as 的操作 不行。

class A:

def __init__(self, text):

self.text = text

with A('大爺') as f1:

print(f1.text)

沒他們不可以這樣操作

class Diycontextor:

def __init__(self,name,mode):

self.name = name

self.mode = mode

def __enter__(self):

print "Hi enter here!!"

self.filehander = open(self.name,self.mode)

return self.filehander

def __exit__(self,*para):

print "Hi exit here"

self.filehander.close()

with Diycontextor('py_ana.py','r') as f:

for i in f:

print i

總結

以上是生活随笔為你收集整理的python中常见的双下方法_python中常见的双下方法_python面向对象(5)__特殊双下方法...的全部內容,希望文章能夠幫你解決所遇到的問題。

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