面向对象的反射和双下方法(魔术方法)
Posted notebook3013
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象的反射和双下方法(魔术方法)相关的知识,希望对你有一定的参考价值。
反射:
通过字符串操作对象相关属性.
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
以上是关于面向对象的反射和双下方法(魔术方法)的主要内容,如果未能解决你的问题,请参考以下文章
python 面向对象专题:元类type反射函数与类的区别特殊的双下方法