2022-9-6更新了内容
一、__iter__() 和__next__()
定义 __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__()方法
https://blog.csdn.net/YZL40514131/article/details/119754233
五、__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()
**执行结果:
__init__执行了
实例化后的对象可以调用了
六、__add__()和__sub__()方法
(2022-9-6更新了内容)
python中所有的运算符背后都是执行对应的魔术方法
__add__()
:控制两个对象进行属性相加
__sub__()
:控制两个对象进行属性相减
class Demo:
def __init__(self,value):
self.value=value
def __add__(self, other):
'''控制俩个对象进行属性相加'''
print(self.value)
print(other.value)
return self.value+other.value
def __sub__(self, other):
'''控制俩个对象进行属性相减'''
return self.value-other.value
a=Demo(11)
b=Demo(22)
print('a+b的结果为:',a+b)
print('a-b的结果为:',a-b)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/123237.html