19面向对象--特殊成员

匿名 (未验证) 提交于 2019-12-02 23:49:02

在python中,除了一些方法,属性之外,还有一些特殊成员

 1 class Foo(object):  2   3     def __new__(cls, *args, **kwargs):  4         """  5         创建一个空对象  6         :param args:  7         :param kwargs:  8         :return:  9         """ 10         print(2) 11         return object.__new__(cls) 12  13     def __init__(self, a1, a2): 14         # 为一个空对象进行数据的初始化 15         self.a1 = a1 16         self.a2 = a2 17  18     def __call__(self, *args, **kwargs): 19         print(1111) 20  21     def __getitem__(self, item): 22         print(item) 23         return 8 24  25     def __setitem__(self, key, value): 26         print(key, value, 1111111) 27  28     def __delitem__(self, key): 29         print(key) 30  31     def __add__(self, other): 32         return self.a1 + other.a1 33  34     def __enter__(self): 35         print('进入文件') 36         return 999 37  38     def __exit__(self, exc_type, exc_val, exc_tb): 39         print(222) 40  41  42 # 1.类名() 自动执行__init__ 43 obj = Foo(1, 2) 44 # 2.对象() 自动执行__call__ 45 obj() 46 # 3.对象[] 自动执行 __getitem__ 47 ret = obj['语文'] 48 print(ret) 49 # 4.对象['xxx']=123 自动执行 __setitem__  # 无返回值 50 obj['k1'] = 123 51 # 5.del 对象['xxxx'] 自动执行 __delitem__ 52 del obj['uuu'] 53 # 6.对象+对象   自动执行 __add__ 54 obj1 = Foo(1, 2) 55 obj2 = Foo(3, 4) 56 ret = obj1 + obj2 57 print(ret) 58 # 7.with 对象 59 obj3 = Foo(1, 2) 60 with obj as f: 61     print(f)   # f就是enter的返回 62     print('内部代码') 63 # 8.真正的构造方法  __new__  在实例化一个对象时,首先执行的是new,其次才是init

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!