定义 __iter__()表示这个类是一个迭代器(iterator)。它只在迭代开始的时候运行一次。返回的是对象本身。经常与__next__()方法一起使用
注意
for … in…这个语句其实做了两件事。
第一件事是获得一个迭代器对象,即调用了__iter__()函数。
第二件事是循环的过程,循环调用__next__()函数。
1、案例:实例列表的遍历
class MyList:
def \_\_init\_\_(self,num):
self.num=num
self.start_num=-1
def \_\_iter\_\_(self):
print('\_\_iter\_\_被调用')
return self
def \_\_next\_\_(self):
print('\_\_next\_\_被调用')
self.start_num+=1
if self.start_num>=self.num:
raise StopIteration()
return self.start_num
if __name__ == '\_\_main\_\_':
mylist=MyList(5)
for i in mylist:
print(i)
执行结果
__iter__被调用
__next__被调用
0
__next__被调用
1
__next__被调用
2
__next__被调用
3
__next__被调用
4
__next__被调用
Process finished with exit code 0
二、__repr__()和__str__()
__repr__()和__str__()两种方法相似:
区别:
__str__是面向用户而言,而__repr__是面向程序员,直接在终端打印信息方便调试。
class MyTest:
def \_\_init\_\_(self,name,age):
self.name=name
self.age=age
def \_\_repr\_\_(self):
print('\_\_repr\_\_被调用了')
return f'{self.name}+{self.age}'
if __name__ == '\_\_main\_\_':
mytest=MyTest('kobe','18')
print(mytest)
class MyTest:
def \_\_init\_\_(self,name,age):
self.name=name
self.age=age
def \_\_str\_\_(self):
print('\_\_str\_\_被调用了')
return f'{self.name}------{self.age}'
if __name__ == '\_\_main\_\_':
mytest=MyTest('kobe','18')
print(mytest)
三、__getattr__()
当对象调用类中不存在的方法时,如果类中定义了__getattr__()方法,那么会自动调用__getattr__()方法
案例:
class A(object):
def \_\_init\_\_(self, a, b):
self.a1 = a
self.b1 = b
print("初始化方法")
def myfunc(self):
print("myfunc")
def \_\_getattr\_\_(self, item):
return self.myfunc
obj_a = A('aa','bb')
obj_a.f1()
obj_a.f2()
obj_a.f3()
obj_a.dss()
执行结果:
初始化方法
myfunc
myfunc
myfunc
myfunc
四、__init__()方法和__new__()方法
blog.csdn.net/YZL40514131…
五、__call__()方法(2022-9-6更新了内容)
实现对象可调用(实例化的对象加括号后,调用__call__()方法)
案例1
实例化后的对象不可以调用
class Demo:
def \_\_init\_\_(self,name):
print('\_\_init\_\_执行了')
self.name=name
if __name__ == '\_\_main\_\_':
m=Demo('kobe')
m()
执行结果报错:
__init__执行了
m()
TypeError: ‘Demo’ object is not callable
案例2,采用了__call__()方法
class Demo:
def \_\_init\_\_(self,name):
print('\_\_init\_\_执行了')
self.name=name
def \_\_call\_\_(self, \*args, \*\*kwargs):
print('实例化后的对象可以调用了')
if __name__ == '\_\_main\_\_':
m=Demo('kobe')
m()
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新