Python物件導向程式設計(5) 類的特殊方法

2021-07-28 08:57:43 字數 3486 閱讀 5468

類的特殊方法

1 深入理解類

類本質上也是乙個物件,只是其擁有建立自身例項的能力

類可以與變數進行繫結,並且可以為類增加屬性

可以把類作為函式的引數傳遞

2 元類

類的建立和管理者(type),所有的類都是元類的例項

isinstance(empty,type)檢視empty是否是type的例項

類例項化過程:__new__()、__init__()

class

testcustom:

def__init__(self):

print

("init method..."

)def

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

print

("new method..."

)return

object.__new__(cls,*args,**kwargs)

testcustom()

自定義元類

目的:可以對建立的類進行預處理(繼承元類)

class

mymeta(type):

def__init__(self,name,bases,dicts):

print

("init method...")

def__new__(cls,name,bases,dicts):

dicts[

'info'

]=lambda

self:

print

("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()

print

(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__()):

print

(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):

print

(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

print

(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);

print

(c1+c2)

print

(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 析構函式 ...