類的特殊方法
1 深入理解類
類本質上也是乙個物件,只是其擁有建立自身例項的能力
類可以與變數進行繫結,並且可以為類增加屬性
可以把類作為函式的引數傳遞
2 元類
類的建立和管理者(type),所有的類都是元類的例項
isinstance(empty,type)檢視empty是否是type的例項
類例項化過程:__new__()、__init__()
class
testcustom:
def__init__(self):
("init method..."
)def
__new__(cls,*args,**kwargs):
("new method..."
)return
object.__new__(cls,*args,**kwargs)
testcustom()
自定義元類
目的:可以對建立的類進行預處理(繼承元類)
class
mymeta(type):
def__init__(self,name,bases,dicts):
("init method...")
def__new__(cls,name,bases,dicts):
dicts[
'info'
]=lambda
self:
("learning python...")
res=type.__new__(cls,name,bases,dicts)
res.school=
"xidian university"
return
res;
class
custom(metaclass=mymeta):
pass if
__name__ ==
'__main__':
cus=custom()
cus.info()
(cus.school)
3 構造序列
實現這四個方法中的某些方法:__len__(self)、__getitem__(self,key)、__setitem__(self,key,value)、__delitem__(self,key)
class
myseq:
def__init__(self):
self.sleq=[
"i",
"ii"
,"iii"
,"iv"]
def__len__(self):
return
len(self.sleq)
def__getitem__(self,key):
if0<=keyreturn
self.sleq[key]
if__name__ ==
'__main__':
myseq=myseq()
foriin
range(myseq.__len__()):
(myseq[i])
4 構造iter
實現__iter__(self)、__next__(self)
class
myiter:
def__init__(self,start,end):
self.count=start;
self.end=end;
def__iter__(self):
return
self;
def__next__(self):
ifself.countr=self.count
self.count+=
1
return
r
else
:
raise
stopiteration
if__name__ ==
'__main__'
:
fori
inmyiter(1,
10):
(i)
5 可比較的類
實現__lt__(),__le__(),__gt__(),__ge__(),__eq__(),__ne__()部分方法
class
point:
def__init__(self,x,y):
self.x=x
self.y=y
def__lt__(self,oth):
#小於的比較
return
self.x
def__gt__(self,oth):
#大於號的比較
return
self.y>oth.y
if__name__ ==
'__main__'
:
p1=point(1,
0)p2=point(0,
1)print
(p1
(p2>p1)
6構造可運算的類
實現__add__(),__sub__(),__mul__(),__div__()協議可以實現運算
class
cal:
def__init__(
self
,num):
self
.num=num
def__add__(
self
,oth):
return
self
.num+oth.num
def__mul__(
self
,oth):
return
self
.num*oth.num
if__name__ ==
'__main__'
:
c1=cal(2)
c2=cal(3);
(c1+c2)
(c1*c2)
python的類 物件導向程式設計
摘自謬雪峰 物件導向程式設計的乙個重要特點就是資料封裝,在上面的student類中,每個例項就擁有各自的name和score這些資料。我們可以通過函式來訪問這些資料,比如列印乙個學生的成績 def print score std print s s std.name,std.score print ...
python物件導向程式設計類與物件的用法
class student object 類屬性 num 0 def init self,name,score 初始化方法 self.name name 雙下滑線定義私有屬性,私有屬性只能在類裡面被訪問 外面無法直接訪問私有屬性 self.score score self.class 自動返回每個物...
python程式設計 12 類的定義 物件導向
類 某種型別集合的描述。舉例 人 屬性 類本身的一些特性,如名字 身高和體重等屬性 屬性具體值則會根據每個人的不同而不同 方法 類所能實現的行為,如吃飯 走路和睡覺等方法。類的定義 class classname 父類名 成員函式及成員變數 init 建構函式 初始化物件的各屬性 del 析構函式 ...