Python 面向对象(五)call ,索引切片调用的函数
1.call 函数,对象后面加个括号,调用__call__方法
class A: def __init__(self): print('init fuc') def __call__(self, *args, **kwargs): print('call func') a = A() #实例化一个对象,调用__init__方法 a() #对象后面加个括号 ,调用__call__方法 A()() # 先实例化一个对象,再在对象后面添加括号
2.索引,切片,调用的函数
class A: def __init__(self): print('init') def __getitem__(self, item): print(item,type(item),'__getitem__') def __setitem__(self, key, value): print(key,value,type(key),'__setitem__') def __delitem__(self, key): print(key,type(key),'__delitem__') a = A() # 实例化一个对象 a['abc'] # abc <class 'str'> __getitem__ 对象后面加一个[] ,进行索引,会调用__getitem__方法 a['abc'] = 'cde' # abc cde <class 'str'> __setitem__ 进行修改,会调用 __setitem__ 方法 del a['abc'] # abc <class 'str'> __delitem__ 删除,会调用__delitem__ 方法 #在list中,情况也差不多,将参数封装到slice类中,在传递给上述函数 a[0:5] # slice(1, 3, None) <class 'slice'> __getitem__ a[0:5]=[1,2,3,4,5,6] # slice(0, 5, None) [1, 2, 3, 4, 5, 6] <class 'slice'> __setitem__ del a[0:5] # slice(0, 5, None) <class 'slice'> __delitem__ #总结 # a = A() -> __init__ # a() -> __call__ # a['k'] -> __getitem__ # a['k'] = v -> __setitem__ # del a['k'] -> __delitem__ # a[1:5] -> __getslice__/__getitem__ 2.7/3.5 # a[1:5] = [1,2,3,4] -> __setslice__/__setitem__ # del a[1:5] -> __delslice__/__delitem__
3.__dict__ 可以查看类和对象的属性
4.__iter__ 类中有这个方法,对象中就可以进行for循环
5.Python中一切事物都是对象,类也是对象,类由type创建,可以了解__metaclass__和__new__方法

浙公网安备 33010602011771号