1、什么是魔法函数??
大概的理解 :以双下划线开头并以双下划线结尾的函数
首先,让我们一起来举个例子:
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __getitem__(self, item): # 使Company可迭代
return self.employee[item]
company = Company(["zhang", "jia", "liu"])
for e in company:
print(e)
在Company中我们就使用了两个魔法函数,其中__init__函数是最常见的哦,它是用来给类初始化用的,__getitem__是使函数可迭代的一个手段,有了它我们的类可以被for循环。
运行结果:
zhang
jia
liu
进程已结束,退出代码0
2、有哪些魔法函数?究竟有哪些种类的魔法函数呢??(分类)
字符串表示的魔法函数:
1. __repr__ # 开发模式下调用,与类的继承无关,可以在任意类中使
2. __str__ # 对字符串格式化时使用
# __str__
In [5]:
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __str__(self):
return ",".join(self.employee)
company = Company(["zhang", "jia", "liu"])
print(company)
Out[5]:
zhang,jia,liu
# __repr__
class Company(object):
def __init__(self, employee_list):
self.employee = employee_list
def __str__(self):
return ",".join(self.employee)
def __repr__(self):
return ",".join(self.employee)
company = Company(["zhang", "jia", "liu"])
company
zhang,jia,liu
其实还有很多很多的魔法函数,比如下边这堆:
- 集合、序列相关:
3. __len__
4. __getitem__
5. __setitem__
6. __delitem__
7. __contains__
- 迭代相关:
8. __iter__
9. __next__
a= iter('dfdfd') #将字符串变成一个可迭代对象,放到变量a中
print(a.__next__()) # 每调用一次输出一个字符串
print(a.__next__())
print(next(a)) # next(a) == a.__next__() 得到的结果是一样的,因为执行next()函数底层调用的就是__next__
- 可调用:
10. __call__
with上下文管理:
11. __enter__
12.__exit__
数值转换:
12. __abs__
13. __bool__
14. __int__
15. __float__
16. __hash__
17. __index__
元类相关:
18. __new__
19. __init__
属性相关:
20. __getattr__、__setattr__
21. __getattribute__、__setattribute__
22. __dir__
属性描述符:
23. __get__、__set__、__delete__
协成:
24. __await__、__aiter__、__anext__、__aenter__、__aexit__