面向对象的反射和双下方法(魔术方法)

反射:

通过字符串操作对象相关属性.

 1 class Text:
 2     def __init__(self,name,age):
 3         self.name = name
 4         self.age = age
 5     def func(self):
 6         print(123)
 7     def func1(self):
 8         return self
 9 
10 text = Text("小明",18)
11 print(hasattr(text,"func"))             # 查看对象是否具有属性或方法,返回布尔值
12 getattr(text,"func")()                  # 获取对象属性的值,或者方法的空间地址(可直接调用)
13 setattr(text,"name","小红")               # 设置对象的属性
14 print(text.name)
15 delattr(text,"name")                      # 删除对象的属性
16 print(text.__dict__)

结果对照:

1 True
2 123
3 小红
4 {'age': 18}

双下(魔术)方法:

定义:双下方法是特殊方法,他是解释器提供的,是 __方法名__形式的具有特殊意义的方法,双下方法主要是python源码程序员使用的,我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码..

 1 class A:
 2     def __init__(self):         # 给一个对象封装属性
 3         pass
 4     def __new__(cls, *args, **kwargs):          # python真正的构造函数,为对象开辟空间,不写查找object的__new__
 5         pass
 6     def __len__(self):                      # 对一个对象执行len()操作就会触发__len__方法
 7         pass
 8     def __call__(self, *args, **kwargs):        # 对一个对象进行调用操作(后面加括号),就会触发__call__方法
 9         pass
10     def __repr__(self):                 # 对象中存在__repr__方法,打印时默认触发..对对象执行repr()方法时候会触发__repr__方法
11         pass
12     def __str__(self):                  # 对象中存在__str__方法,打印时默认触发..执行str()也会触发(__str__和__repr__同时存在时,默认str)
13         pass
14     def __hash__(self):                 # 对对象执行hash()操作的时候会触发__hash__方法,可指定返回值(__new__存在时返回值不是指定的)
15         pass
16     def __eq__(self, other):            # 当对对象执行等于或不等于操作的时候,就会触发__eq__方法,返回布尔值
17         pass
18     def __del__(self):                  # 当一个对象从内存中清除的时候,实际是触发了__del__方法
19         pass
20     def __enter__(self):                # python的上下文管理方法
21         pass
22     def __exit__(self, exc_type, exc_val, exc_tb):      # __exit__与__enter__需同时存在,就可以对对象使用with操作
23         pass

猜你喜欢

转载自www.cnblogs.com/NoteBook3013/p/10344009.html