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

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面向对象反射,双下方法

Python面向对象之反射,双下方法

python 面向对象专题:元类type反射函数与类的区别特殊的双下方法

python 面向对象专题:元类type反射函数与类的区别特殊的双下方法

面向对象之:元类,反射, 双下方法