反射机制

09-06 反射、内置方法

亡梦爱人 提交于 2020-01-18 12:10:50
一 反射 在Python中,反射指的是通过字符串来操作对象的属性,涉及到四个内置函数的使用(Python中一切皆对象,类和对象都可以用下述四个方法) class Teacher: def __init__(self,full_name): self.full_name =full_name t=Teacher('Egon Lin') # hasattr(object,'name') hasattr(t,'full_name') # 按字符串'full_name'判断有无属性t.full_name # getattr(object, 'name', default=None) getattr(t,'full_name',None) # 等同于t.full_name,不存在该属性则返回默认值None # setattr(x, 'y', v) setattr(t,'age',18) # 等同于t.age=18 # delattr(x, 'y') delattr(t,'age') # 等同于del t.age 插图:恶搞图43 基于反射可以十分灵活地操作对象的属性,比如将用户交互的结果反射到具体的功能执行 >>> class FtpServer: ... def serve_forever(self): ... while True: ... inp=input('input your

09-06 反射、内置方法

梦想与她 提交于 2020-01-18 12:10:42
一 反射 在Python中,反射指的是通过字符串来操作对象的属性,涉及到四个内置函数的使用(Python中一切皆对象,类和对象都可以用下述四个方法) class Teacher: def __init__(self,full_name): self.full_name =full_name t=Teacher('Egon Lin') # hasattr(object,'name') hasattr(t,'full_name') # 按字符串'full_name'判断有无属性t.full_name # getattr(object, 'name', default=None) getattr(t,'full_name',None) # 等同于t.full_name,不存在该属性则返回默认值None # setattr(x, 'y', v) setattr(t,'age',18) # 等同于t.age=18 # delattr(x, 'y') delattr(t,'age') # 等同于del t.age 插图:恶搞图43 基于反射可以十分灵活地操作对象的属性,比如将用户交互的结果反射到具体的功能执行 >>> class FtpServer: ... def serve_forever(self): ... while True: ... inp=input('input your

C#-特性,反射,动态编程

对着背影说爱祢 提交于 2020-01-18 06:55:53
参考文档 https://www.cnblogs.com/SignX/p/11569837.html 特性 侵删 https://www.cnblogs.com/forever-Ys/p/10428568.html 一、什么是特性   特性是一种允许我们向程序的程序集添加元数据的语言结构,它是用于保存程序结构信息的某种特殊类型的类。简单说就是为一个类或者类的属性等添加更多的说明与标记    MSDN 中对它的解释是:特性提供功能强大的方法以将声明信息与 C# 代码(类型、方法、属性等)相关联。特性与程序实体关联后,即可在运行时使用名为“反射”的技术查询属性。   (有关元数据和反射的知识,点击查看 C# 反射 ) 公共语言运行时允许你添加类似关键字的描述声明,叫做attributes即特性,它对程序中的元素进行标注,如类型、字段、方法和属性等。Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来 向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为。 在.NET中,Attribute被用来处理多种问题,比如序列化、程序的安全特征、防止即时编译器对程序代码进行优化从而代码容易调试等等。下面,我们先来看几个在.NET中标准的属性的使用,稍后我们再回过 头来讨论Attribute这个类本身。(文中的代码使用C#编写

C# 反射(Reflection)

南楼画角 提交于 2020-01-16 11:53:48
C# 反射(Reflection) 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 程序集包含模块,而模块包含类型,类型又包含成员。反射则提供了封装程序集、模块和类型的对象。 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现有对象中获取类型。然后,可以调用类型的方法或访问其字段和属性。 优缺点 优点: 1、反射提高了程序的灵活性和扩展性。 2、降低耦合性,提高自适应能力。 3、它允许程序创建和控制任何类的对象,无需提前硬编码目标类。 缺点: 1、性能问题:使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此反射机制主要应用在对灵活性和拓展性要求很高的系统框架上,普通程序不建议使用。 2、使用反射会模糊程序内部逻辑;程序员希望在源代码中看到程序的逻辑,反射却绕过了源代码的技术,因而会带来维护的问题,反射代码比相应的直接代码更复杂。 反射(Reflection)的用途 反射(Reflection)有下列用途: 它允许在运行时查看特性(attribute)信息。 它允许审查集合中的各种类型,以及实例化这些类型。 它允许延迟绑定的方法和属性(property)。 它允许在运行时创建新类型,然后使用这些类型执行一些任务。 查看元数据 使用反射(Reflection)可以查看特性(attribute)信息。 System.Reflection 类的

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

好久不见. 提交于 2020-01-15 23:35:43
一. 反射   反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省)。 这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。 python面向对象中的反射:通过字符串的形式操作对象相关的属性。python中的一切事物都是对象(都可以使用反射) 四个可以实现自省的函数 下列方法适用于类和对象(一切皆对象,类本身也是一个对象) class Foo: f = '类的静态变量' def __init__(self,name,age): self.name=name self.age=age def say_hi(self): print('hi,%s'%self.name) obj=Foo('egon',73) #检测是否含有某属性 print(hasattr(obj,'name')) print(hasattr(obj,'say_hi')) #获取属性 n=getattr(obj,'name') print(n) func=getattr(obj,'say_hi') func() print(getattr(obj,'aaaaaaaa','不存在啊')) #报错 #设置属性 setattr(obj,'sb',True) setattr(obj,

Class对象和反射

瘦欲@ 提交于 2020-01-15 05:06:14
1.class对象 在java中一切都是对象,从某种意义上,java中的对象可以分为:实例对象和Class对象。实例对象通过new关键得到,那么Class对象呢?Class对象无法通过new关键字获取,在类加载的过程中,JVM生成一个与加载的字节码文件相关的class对象。通过类名可以获取对应Class对象。class对象主要用来对应类的所有对象。java程序在运行之前并未完全加载,各个类只在需要的时候才将该类加载进内存,生成对应的class对象。 所有的类都是在对其第一次使用的时候,动态加载到JVM中,当程序创建第一个对类静态成员的引用的时候,就会加载这个。使用new创建类的对象的也会被当做是对类静态成员的引用。因此java程序在它开始运行之前并非被完全加载,其各个部分是在必须的时候才加载。一旦某个类的Class对象被载入内存,它就用来创建这个类的所有的对象。如下面程序所示: 1 class Test1{ 2 static{ 3 System.out.println("loading1"); 4 } 5 6 } 7 class Test2{ 8 static{ 9 System.out.println("loading2"); 10 } 11 12 } 13 class Test3{ 14 static{ 15 System.out.println("loading3"); 16

单例模式

我是研究僧i 提交于 2020-01-15 00:27:55
单例模式 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 注意: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 介绍 意图: 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 主要解决: 一个全局使用的类频繁地创建与销毁。 何时使用: 当您想控制实例数目,节省系统资源的时候。 如何解决: 判断系统是否已经有这个单例,如果有则返回,如果没有则创建。 关键代码: 构造函数是私有的。 应用实例: 1、一个班级只有一个班主任。 2、Windows 是多进程多线程的,在操作一个文件的时候,就不可避免地出现多个进程或线程同时操作一个文件的现象,所以所有文件的处理必须通过唯一的实例来进行。 3、一些设备管理器常常设计为单例模式,比如一个电脑有两台打印机,在输出的时候就要处理不能两台打印机打印同一个文件。 优点: 1、在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例(比如管理学院首页页面缓存)。 2、避免对资源的多重占用(比如写文件操作)。 缺点:

反射初学

眉间皱痕 提交于 2020-01-13 18:45:02
目录 概述 获取字节码文件的三种方式: Class对象功能: 获取功能: 示例: Constructor:构造方法 示例: Method:成员方法 示例 案例 概述 框架:半成品软件。可以在框架的基础上进行软件开发,简化编码。 反射:将类的各个组成部分封装为其他对象,这就是反射机制。 好处: 可以在 程序运行过程中 ,操作这些对象。 可以 解耦 ,提高程序的可扩展性。 Java代码在计算机中的三个阶段 获取字节码文件的三种方式: static Class<?> forName(String className) :将字节码文件加载进内存,返回Class对象。 多用于配置文件,将类名定义在配置文件中。读取文件,加载类。 类名.class:通过类名的属性 class获取。 多用于参数的传递。 对象.getClass():getClass()在Object类中定义着。 多用于对象的获取字节码的方式。 结论 :同一个字节码文件( * .class)在一次程序的运行过程中,只会被加载一次,不论通过哪一种方式获取 Class对象都是同一个。 示例: package com.my.reflect; import com.my.domain.Person; public class ReflectDemo1 { /* 获取Class对象的三种方式: 1.Class.forName("全类名");

Reflection 反射

主宰稳场 提交于 2020-01-13 12:55:20
目录 Reflection 反射 反射的定义 反射的作用 Class类 Class类的对象获取 Class API 反射操作泛型 反射操作注解 反射的性能问题 Reflection 反射 反射的定义 反射机制: 在程序运行时可以加载,探知,使用编译期间完全未知的类 程序在运行状态中,可以动态加载一个只有名称的类,对于任意一个加载的类,都能够知道这个类的所有属性和方法;同时任意一个对象也都能够调用它的任意一个方法和属性。同时一个类只有一个反射对象,比如多次调用Class.forName得到的也是相同对象 形象的说: 使用以下反射代码来获取一个类的对象 Class c = Class.forName("com.company.project.ClassName"); 当加载完成后,堆内存中就产生了一个ClassName类型的对象,通过这个对象我们就可以看到类的结构,这个就时反射 反射的作用 动态加载类、动态获取类的信息(属性、方法、构造器) 动态构造对象 动态调用类和对象的任意方法、构造器 动态调用和处理属性 获取泛型信息 处理注解 Class类 public final class Class extends Object implements Serializable, GenericDeclaration, Type, AnnotatedElement

java学习:用反射构造bean

假如想象 提交于 2020-01-13 08:31:48
先贴一些反射的基本知识: -------------------------------------------------------------------- 一、什么是反射: 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提 出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩。其中 LEAD/LEAD++ 、OpenC++ 、MetaXa和OpenJava等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。 反射本身并不 是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机 制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用 所描述行为的状态和相关的语义。 二、什么是Java中的类反射: Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说“自审”,并能直接操作程序的内部属性和方法。Java 的这一能力在实际应用中用得不是很多