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)__特殊双下方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql主备数据库配置文档_MySQL
- 下一篇: sp MySQL 导入_mysql数据导