关于类里的一些特殊成员

类里的一些特殊成员

 1 class Foo(object):
 2 
 3     def __init__(self,a1,a2):
 4         self.a1 = a1
 5         self.a2 = a2
 6     
 7     def __call__(self, *args, **kwargs):
 8         print(11111,args,kwargs)
 9         return 123
10 
11     def __getitem__(self, item):
12         print(item)
13         return 8
14 
15     def __setitem__(self, key, value):
16         print(key,value,111111111)
17 
18     def __delitem__(self, key):
19         print(key)
20 
21     def __add__(self, other):
22         return self.a1 + other.a2
23 
24     def __enter__(self):
25         print('1111')
26         return 999
27 
28     def __exit__(self, exc_type, exc_val, exc_tb):
29         print('22222')

关于特殊方法的执行方式
1、类名 ()  自动执行 __init__

2、对象 ()  自动执行 __call__ 有返回值

 ret=obj(6,4,2,k1=478)

3、对象["xx"]  自动执行 __getitem__ 有返回值

ret=obj["mm"]

print(ret)

4、对象["xx"] =124 自动执行 __setitem__

obj['k1'] = 123  # "k1" 给key 传值,123给value传值

5、del 对象[xx]       自动执行__delitem__

del obj["xxx"]

6、对象+对象      自动执行__add__

obj1=Foo(1,2) 参数分别传给self other

obj2=Foo(3,4)

ret=obj1+obj2

7、with 对象        自动执行 __enter__ / __exit__ 按顺序执行

with obj as f:
     print(f)
     print('内部代码')

#1111
#999
#内部代码
#22222

8、真正的构造方法

 1 class Foo(object):
 2     def __init__(self, a1, a2):     # 初始化方法
 3         """
 4         为空对象进行数据初始化
 5         :param a1:
 6         :param a2:
 7         """
 8         self.a1 = a1
 9         self.a2 = a2
10 
11     def __new__(cls, *args, **kwargs): # 构造方法
12         """
13         创建一个空对象
14         :param args:
15         :param kwargs:
16         :return:
17         """
18         return object.__new__(cls) # Python内部创建一个当前类的对象(初创时内部是空的.).
19 
20 obj1 = Foo(1,2)
21 print(obj1)
22 
23 obj2 = Foo(11,12)
24 print(obj2)

 

posted @ 2018-08-29 16:35  神神气气  阅读(178)  评论(0编辑  收藏  举报