date: 2021-06-29title: python之call和len方法 #标题
tags: #标签
categories: python # 分类
记录下python中的__call__
和__len__
方法使用场景。参考:老男孩教育。
call
class A:
pass
def __call__(self, *args, **kwargs):
print('abcdefg')
# 对象后面加括号,就可以调用到类中的 __call__ 方法
# 一般很少用,只有在源码中会看到
A()()
len
# len(对象)需要在这个对象中实现__len__方法
# 假设代码如下
class Cls:
def __init__(self, name):
self.name = name
self.students = []
py22 = Cls('python22期')
py22.students.append('张三')
py22.students.append('李四')
py22.students.append('王五')
# 最后要求这个students列表中的人个数,只能通过如下方式去求
print(len(py22.students))
# 但是如果将代码改为如下,就不一样了,可以直接len(对象名)去求
class Cls:
def __init__(self, name):
self.name = name
self.students = []
def __len__(self): # 当类中实现了__len__方法,就可以直接len(对象名)来调用这个__len__方法了
return len(self.students)
py22 = Cls('python22期')
py22.students.append('张三')
py22.students.append('李四')
py22.students.append('王五')
# len()方法说白了就是去找对象中的__len__函数,像list,dict那些支持len()计算长度的数据类型中,都有__len__方法
print(len(py22))