類的專有方法
__init__ :構(gòu)造函數(shù)坏平,在生成對象時調(diào)用
__del__ :析構(gòu)函數(shù)答渔,釋放對象時使用
__repr__ :打印,轉(zhuǎn)換
__setitem__ :按照索引賦值
__getitem__:按照索引獲取值
__len__:獲得長度
__cmp__:比較運算
__call__:函數(shù)調(diào)用
__add__:加運算
__sub__:減運算
__mul__:乘運算
__div__:除運算
__mod__:求余運算
__pow__:乘方
str方法(str())
- str不重寫打印的是地址
- 重寫這個方法會打印你設(shè)置的返回值,必須返回字符串
repr方法
iter方法(iter())
next方法(it.next())
class 女神備胎:
def __init__(self):
self.num = 1
def __iter__(self):
return self
def __next__(self):
self.num += 1
if self.num > 108:
raise StopIteration # 用for循環(huán)不會報錯,只會停止
return self.num
for i in 女神備胎():
print(i)
getitem方法(list[n[:m]])
class 集合:
def __getitem__(self, item):
list1 = [1, 2, 3, 4, 3, 2, 1]
if isinstance(item, int):
return list1[item]
elif isinstance(item, slice): # 切片
return list1[item]
jihe = 集合()
for i in jihe:
print(i)
print(jihe[1:3])
call方法(把對象當做一個函數(shù)用)
class PaoNiu:
def __init__(self,name):
self.name = name
def __call__(self):
print("我被調(diào)用了")
paoNiu = PaoNiu("Luo")
paoNiu()
lt方法(對象之間進行對比,返回True False)
print(cmp(1,2))# python3被棄用了這個方法
# 覆蓋了這個方法之后就可以排序了,也可以用lambda對類的某個屬性進行排序
def __lt__(self, value):
return self.num < value.num
hasattr(對象,方法字符串)
- 判斷是否有該屬性/方法
getattr方法(獲取動態(tài)設(shè)置的屬性的值赴穗,重寫 對象.屬性 運算)
__getattr__(self, attr):
setattr方法(self, attr, data)
def __setattr__(self, attr, data):
if attr=="tall":
raise "不能進行賦值"
else:
super().__setattr__(attr, data)
delattr()方法(刪除屬性)
def __delattr__(self,attr):
if attr=="money":
raise Exception("不能刪除money")
super().__delattr__(attr)
contains()方法(判斷數(shù)據(jù)是否在)
def __contains__(self,data):
return data in self.list
index()方法(返回進制)
def __index__(self,data):
return data in self.list
new()方法(攔截對象創(chuàng)建孤个,返回一個對象)
class B:
pass
class A:
def __new__(self):
return B()
def __init__(self):
new方法
- new是用來創(chuàng)建實例的,object里面自動調(diào)用了痊乾,你如果需要重寫络断,必須要返回object.new(cls)
- call來創(chuàng)建new射亏,new來創(chuàng)建init
metaclass方法
- 定義這個類如何被創(chuàng)建
-
metaclass = MyType
get()方法
set()方法
delete()方法