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

反射:

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

 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

原文地址:https://www.cnblogs.com/NoteBook3013/p/10344009.html

时间: 2024-10-14 23:30:03

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

面向对象之: 反射和双下方法

目录 一, 反射 二, 函数VS方法 三, 双下方法 一, 反射 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) python面向对象中的反射:通过字符串的形式操作对象相关的属性 python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数,下列方法适用于类和对象(一切对象,类本身也是对象) # 对实例化对象的示例 class Foo: f = '类的静态变量' def __init__(self, name, age): self.name = name sel

面向对象:反射和双下方法

面向对象:反射和双下方法 1.元类type type:获取对象从属于的类 class A: pass obj = A() print(type(A)) print(type('abc')) print(type([1,2,3])) python中一切皆对象,类在某种意义上也是一个对象,python中自己定义的类,以及大部分内置类都是由type元类(构建类)实例化得来的 type 与 object 的关系 object类是type类的一个实例,object类是type的父类. print(type

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

一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 原文地址:https://www.cnb

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

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) class Foo:    f = '

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

一. 反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩. python面向对象中的反射:通过字符串的形式操作对象相关的属性.python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) 对实例化对象的示例 class Foo

面向对象进阶---魔术方法

内置方法 双下方法 魔术方法: 都是python的对象内部自带的 并且都不需要我们自己去调用它 1.  __str__  __repr__:改变对象的字符串显示   输出的类型为str class Course: def __init__(self, name, price, period): self.name = name self.price = price self.period = period def __repr__(self): # 备胎 return '%s,%s,%s' %

Python 中的特殊双下划线方法

python类内部部分双下划线特殊方法 __setattr__, __getattr__, __delattr__, hasattr __getattribute__ __getitem__(),__setitem__(), __delitem__() 主程序如下: class Foo: def _inif(self,pname): self.pname = pname def func(): print('i'm func') def __getattr__(self, item): prin

python之路-双下方法

双下方法 定义: 双下方法是特殊方法,他是解释器提供的,由双下线加方法名加双下划线 __方法名__具有特殊意义的方法 双下方法主要是Python源码程序员使用的,元编程 我们在开发中尽量不要使用双下方法,但是深入研究双下方法,更有益于我们阅读源码 1.__len__ 计算长度 s = 'nihaoashuaige' print(len(s)) #len作为内置函数,部分数据类型调用它的时候就会返回其长度,那是什么让这个函数起了这样的作用呢 #看一下字符串的str类的内容里有__len__方法,所

PHP 魔术方法之__set__get__unset__isset

[php] view plain copy print? <?php /*** 魔术方法: 是指某些情况下,会自动调用的方法,称为魔术方法 PHP面向对象中,提供了这几个魔术方法, 他们的特点 都是以双下划线__开头的 __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke