一、常用內(nèi)置函數(shù)
class? ? Person:
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
#實(shí)例化一個(gè)對(duì)象
anyan = Person('anyan',18)
1.對(duì)屬性的增刪改查
( 1 ).hasattr(anyan,'name')? ? 判斷屬性存不存在
(2).getattr(anyan,'name')? ? 獲取屬性的屬性值
(3).setattr(anyan,'age',3)? ? ? 無(wú)則增洞慎,有則改
(4).delattr(anyan,'sex')? ? ? 刪除屬性
class? ? ? Hunan(Person):
? ? ? ? pass
2.其他方法
(1).issubclass(Hunan,Person)? ? 判斷前面的累是不是后面的子類
ssubclass(Hunan,object)
>>>True
(2). isinstance(anyan痛单,Person) ? ? 判斷前面的實(shí)例是不是屬于后面實(shí)例出來(lái)的實(shí)例
isinstance(1,(int,float))
>>>True
(3).type(1) == int? ? 判斷數(shù)據(jù)類型,但是只能判斷單個(gè)
二劲腿、屬性調(diào)用方法
1.屬性調(diào)用過(guò)程
class? ? Person:
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
? ? ? ? #item 接收實(shí)例的屬性
? ? ? ? def? __getattr__(self,item):
? ? ? ? ? ? ? ? print(f'{item}實(shí)行不存在')
class? ? Person:
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
? ? ? ? #cls代表類本身
? ? ? ? #new用來(lái)創(chuàng)建實(shí)例對(duì)象的
? ? ? ? def? ? __new__(cls,*args,**kwargs):? ?
? ? ? ? ? ? ? ? print('調(diào)用實(shí)例對(duì)象')
? ? ? ? ? ? ? ? ay = super().__new__(cls)
? ? ? ? ? ? ? ? return ay
三旭绒、魔法方法
1.單例模式:類里面始終存在一個(gè)實(shí)例,不會(huì)同時(shí)出現(xiàn)多個(gè)實(shí)例
class? ? Person:
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
? ? ? ? def? __new__(cls,*args,**kwargs):
? ? ? ? ? ? ? ? #如果當(dāng)前類中沒(méi)有這個(gè)屬性
? ? ? ? ? ? ? ? if? not? hasattr(cls,'_instance'):
? ? ? ? ? ? ? ? ? ? ? ? ? ? cls._instance = super().__new__(cls)
? ? ? ? ? ? ? ? return? ? cls._instance
2.輸出魔法方法
#__str__方法是修改print打印的樣子
#__repr__方法是修改shell加護(hù)模式下的樣子
class? ? Person:
? ? ? ? def? ? __init__(self,name,age):
? ? ? ? ? ? ? ? self.name = name
? ? ? ? ? ? ? ? self.age = age
? ? ? ? def? ? __str__(self):
? ? ? ? ? ? ? ? return? ? 'this is str'
? ? ? ? def? ? __repr__(self):
? ? ? ? ? ? ? ? return? ? 'this is repr'
? ? ? ? #將實(shí)例對(duì)象變成可調(diào)用的
? ? ? ? def? ? ? __call__(self,sum)
? ? ? ? ? ? ? ? print(sum)
四焦人、協(xié)議
1.序列協(xié)議:__getitem__挥吵,__len__
class? ? IndexTuple:
? ? ? ? def? ? __init__(self,*args):
? ? ? ? ? ? ? self.value = tuple [i? for i? in? args]
? ? ? ? ? ? ? #通過(guò)美劇方法獲取下標(biāo)
? ? ? ? ? ? ? #enumerate()函數(shù)可以將一個(gè)可遍歷對(duì)象組合成一個(gè)索引序列
? ? ? ? ? ? ? ? #同時(shí)列出數(shù)據(jù)下標(biāo)和數(shù)據(jù)值
? ? ? ? ? ? ? ? self.index = tuple(enumerate(self.values))
? ? ? ? ? ? #長(zhǎng)度方法,返回方法
? ? ? ? ? def? ? __len__(self):
? ? ? ? ? ? ? ? ? ? return? len(self.values)
? ? ? ? ? def? ? __getitem__(self花椭,key)::
? ? ? ? ? ? ? ? ? ? return? ? self.index[key][1]
? ? ? ? ? ? def? ? __repr__(self):
? ? ? ? ? ? ? ? ? ? return? ? str(self.values)
2.迭代器協(xié)議
class? ? Number:
? ? ? ? def? ? __init__(self,end=10):
? ? ? ? ? ? ? ? self.start = 0
? ? ? ? ? ? ? ? self.end = end
? ? ? ? #通過(guò)__iter__方法把類對(duì)象變成可迭代對(duì)象
? ? ? ? def? ? __iter__(self):? ?
? ? ? ? ? ? ? ? return? ? self
? ? ? ? #通過(guò)__next__方法把可迭代對(duì)象變成迭代器
? ? ? ? def? ? __next__(self):
? ? ? ? ? ? ? ? a = self.start
? ? ? ? ? ? ? ? if? ? self.start>=self.end:
? ? ? ? ? ? ? ? ? ? ? ? #主動(dòng)跑出異常
? ? ? ? ? ? ? ? ? ? ? ? raise? ? StopIteration
? ? ? ? ? ? ? ? self.start += 1
? ? ? ? ? ? ? ? return? ? a
3.上下文協(xié)議
import? ? time
class? ? RunTine:
? ? #只要with語(yǔ)句出現(xiàn)忽匈,enter方法就會(huì)被觸發(fā)
? ? def? ? __enter__(self):? ?
? ? ? ? #time.time()返回當(dāng)時(shí)時(shí)間的時(shí)間戳
? ? ? ? self.start_time = time.time()
? ? ? ? rerurn? ? self.start_time
? ? #當(dāng)__enter__方法執(zhí)行后,就會(huì)執(zhí)行__exit__方法
? ? #exc_type:異常類型
? ? #exc_val:異常值
? ? #exc_tb:追蹤信息
? ? #只有當(dāng)__enter__方法或者with中存在錯(cuò)誤時(shí)个从,以上三個(gè)才會(huì)有值
? ? def? ? __exit__(self,exc_type,exc_val,exc_tb):
? ? ? ? self.end_time = time.time()
? ? ? ? self.run_time = self,end_time - self.start_time
? ? ? ? print(f'運(yùn)行時(shí)間為:{self.run_time}')
? ?