- 上文介紹了Python的類成員以及成員修飾符,從而瞭解到類中有欄位、方法和屬性三大類成員,並且成員名前如果有兩個下劃線,則表示該成員是私有成員,私有成員只能由類內部呼叫。無論人或事物往往都有不按套路出牌的情況,Python的類成員也是如此,存在著一些具有特殊含義的成員,詳情如下:
__init__ 類()自動執行
__del__
__call__ 物件(),類()() 自動執行
__int__ int(obj)
__str__ str(obj)
__add__
__dict__ #將物件中封裝的所有內容透過字典的形式返回
__getitem__ 切片或者索引
__setitem__
__delitem__
__iter__
如果類中有__iter__方法,物件===》》可迭代物件
物件.__iter__() 的返回值:迭代器
for迴圈,迭代器,next方法
for迴圈,可迭代物件,物件.__iter__() ,迭代器,next方法
1、執行Li物件的類Foo類中的__iter__方法,並獲取其返回值
2、迴圈上一步中返回的物件
- 1.call,物件後面加括號,觸發執行。
class Foo:
def __init__(self):
print('init')
def __call__(self, *args, **kwargs):
print('call')
obj = Foo()
obj() #物件()自動執行__call__方法
-2.str,如果一個類中定義了__str__方法,那麼在列印 物件 時,預設輸出該方法的返回值。
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def __str__(self):
return '%s-%s'%(self.name,self.age)
obj = Foo('xwl',23)
print(obj) #print(str(obj))--->>str(obj)--->>obj中的__str__,並獲取返回值
- 3.dict,類或物件中的所有成員
class Foo:
"""
描述
"""
def __init__(self,name,age):
self.name = name
self.age = age
obj = Foo('xwl',18)
b = obj.__dict__ # {'name': 'xwl', 'age': 18}
print(b)
ret = Foo.__dict__
print(ret)
#{'__module__': '__main__', '__doc__': '\n 描述\n ',
# '__init__': <function Foo.__init__ at 0x000002AA9219C820>, '__dict__': <attribute '__dict__' of 'Foo' objects>,
# '__weakref__': <attribute '__weakref__' of 'Foo' objects>}
-4.getitem、setitem、delitem,用於索引操作,如字典。以上分別表示獲取、設定、刪除資料
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def __getitem__(self, item):
return item+10
def __setitem__(self, key, value):
print(key,value)
def __delitem__(self, key):
print(key)
Li = Foo('xwl',18)
r = Li[1] #自動執行Li物件中的__getitem__方法
print(r) # 11
Li[100] = 'dasdfd' #自動執行Li物件中的__setitem__方法 # 100 dasdfd
del Li[999] #自動執行Li物件中的__delitem__方法 # 999
- 5.iter ,用於迭代器,之所以列表、字典、元組可以進行for迴圈,是因為型別內部定義了 iter
class Foo:
def __init__(self,name,age):
self.name = name
self.age = age
def __iter__(self):
return iter([11,22,33,44])
Li = Foo('xwl',18)
#如果類中有__iter__方法,物件===》》可迭代物件
#物件.__iter__() 的返回值:迭代器
#for迴圈,迭代器,next方法
#for迴圈,可迭代物件,物件.__iter__() ,迭代器,next方法
#1、執行Li物件的類Foo類中的__iter__方法,並獲取其返回值
#2、迴圈上一步中返回的物件
for i in Li:
print(i)