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...