整理Python(定製類 特殊方法)

2021-08-17 06:08:27 字數 3254 閱讀 1402

1.__str__和__repr__

如果把乙個類的例項變成str,就需要實現特殊方法__str__( ):

class person(object):

def __init__(self,name,gender):

self.name=name

self.gender=gender

def __str__(self):

return '(person: %s ,%s)'%(self.name,self.gender)

__str__:用於顯示給使用者   __repr__:用於顯示給開發人員

__repr__=__str__
2.__slots__

限制例項的屬性

class student(object):

__slots__=('name','age)

#用tuple定義 允許繫結的屬性名稱

__slots__定義的屬性僅對當前例項起作用,對繼承的子類不起作用

3.@property

python內建的@property 裝飾器 負責把乙個方法變成屬性呼叫

class student(object):

@property #把乙個getter方法變成屬性,只需要加上@property

def score(self): #此時,又建立了另外乙個裝飾器 @score.setter

return self._score

@score.setter #@score.setter 負責把乙個setter方法變成屬性賦值

def score(self,value):

if not isinstance(value,int):

raise valueerror('score must be an integer')

if value <0 or value >100:

raise valueerror('score must between 0~100')

self._score=value

4.__len__

如果乙個類表現的像乙個list,要獲取有多少個元素,就得用len()函式

要讓len()函式正常執行,類必須提供乙個特殊方法__len__( ),它返回元素的個數

class studernt(object):

def __init__(self,*args):

self.names=args

deg __len__(self):

return len(self.names)

5.__iter__   和  __next__

如果乙個類想被用於for...in 迴圈,類似list 和tuple 那樣,就要用__iter__( ) 方法,它返回乙個迭代物件

然後,python的for迴圈就會不斷呼叫該迭代物件的__next__( )方法拿到迴圈的下乙個值,直到遇到stopiteration 錯誤時退出迴圈

#斐波那契數列為例

class fib(object):

def __init__(self):

self.a,self.b=0,1 #初始化兩個計數器 a,b

def __iter__(self):

return self #例項本身就是迭代物件,故返回自己

def __next__(self):

self.a,self.b = self.b,self.a+self.b #計算下乙個值

if self.a>100000: #退出迴圈的條件

raise stoptteration()

return self.a #返回下乙個值

6. __getitem__

要表現的像list那樣按照下標取元素,需要__getitem__()方法:

class fib(object):

def __getitem__(self,n):

a,b=0,1

for x in range(n):

a,b=b,a+b

return

7.__getatter__

在自定義類中,如果呼叫乙個屬性不存在時,可以呼叫__getatter__( ) ,動態返回乙個屬性

class student(object):

def __init__(self):

self.name='li'

def __getatter__(self,atter)

if atter='score'

return 99

比如不存在score時,__getatter__(self,'score')來嘗試獲得屬性,返回定義的值

8.__call__  和 callable( )

乙個物件例項可以有自己的屬性和方法,在呼叫例項方法時,用instance.method()呼叫

也可以直接作用在例項本身上    (物件中呼叫例項方法,模擬,類中呼叫例項

任何乙個類,只需要定義__call__( ) 方法,就可以直接對例項進行呼叫   

class student(object):

def __init__(self,name):

self.name=name

def __call__(self):

print('my name is %s.'%self.name)

怎麼判斷乙個變數是物件還是函式

需要判斷乙個物件是否被呼叫,能被呼叫的物件就是乙個callable物件

callable(student())   #返回 true

callable(max) #返回 true

callable([1,2,3,]) #返回false

python定製 python中定製類

1 python中 str 和repr 如果要把乙個類的例項變成 str,就需要實現特殊方法 str classperson object def init self,name,gender self.name name self.gender genderdef str self return p...

PYTHON類的特殊方法

例項1 python view plain copy coding utf 8 class firstdemo object 這裡是乙個doc a 10 類屬性 def demo self 第乙個方法 pass def demo2 self 第二個方法 pass print firstdemo.di...

Python類的特殊方法

doc描述類的資訊 class foo object 單引號和雙引號都可以 這裡描述類的資訊 def func self passprint foo.doc 這裡描述類的資訊 call物件後面加括號,觸發執行 class foo object defcall self,args,kwargs pri...