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__方法

posted @ 2017-05-01 16:53  1916  阅读(231)  评论(0)    收藏  举报