实例化

2019.9.3学习内容及笔记

坚强是说给别人听的谎言 提交于 2019-11-29 05:01:27
小结 元类 首先明确python中一切皆对象,那么 类实际上也是对象 例如:现有一个Person类, 现在我们说一切皆对象,类也是对象,那么这个Person也一定是由一个类实例化得到的,这个类,就叫做元类 **type是内置的一个元类,所有的类都是由type实例化的得到 总结:能产生类的类,叫元类 class Person: def __init__(self,name): self.name=name def score(self): print('分数是100') p=Person('nick') #p.score()#分数是100 a=Person #Person是类名 p1=a('tank') #a实例化产生对象p1 print(p1.name) #tank #如何找元类 #print(type(p))#<class '__main__.Person'> #type类是产生所有类的元类 print(type(Person)) #<class 'type'> print(type(dict))#<class 'type'> print(type(list))#<class 'type'> print(type(str))#<class 'type'> print(type(object))#<class 'type'> print(type(type))#<class

元类

陌路散爱 提交于 2019-11-29 04:56:42
目录 元类 1.什么是元类 2.为什么用元类 3.内置函数exec(以后用的,先学着) 4.class创建类 4.type实现 5.自定义元类控制类的创建 5.1 应用 6.__call__(储备) - 要想让obj这个对象变成一个可调用的对象,需要在该对象的类中定义一个方法 __call__方法,该方法在调用对象的时候自动触发 7.__new__(储备) 我们之前所说类实例化第一个调用的是__init__,但__init__其实并不是实例化 类de时候第一个调用的方法,在我们使用类实例化的时候,他会生成一个框架,在 哪之后才会将class_name,class_bases,class_dic,添加进去,返回一个完整的 类,其实这个最先被调用的方法是__new__方法. __new__方法接受的参数虽然也和__init__一样,但__init__是在类实例创建之 后调用的,而__new__方法正是创建这个类的方法. ```python class A: pass 8.自定义元类控制类的实例化 10.自定义元类后类的继承顺序 元类 1.什么是元类 在python中一切皆对象,那我们用class关键字定义的类本身也是一个对象,负责产生 该对象的类称之为元类,即元类可以简称为类的类. class Foo: # Foo=元类 pass 元类(type) --实例化 --> 我们所使用的的类

你真的会用单例模式?

戏子无情 提交于 2019-11-29 03:34:51
单例模式可以说只要是一个合格的开发都会写,但是如果要深究,小小的单例模式可以牵扯到很多东西,比如:多线程是否安全?是否懒加载?性能等等。还有你知道几种单例模式的写法呢?如何防止反射破坏单例模式? 一、 单例模式 1.1 定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象。有点像 Java 的静态变量,但是单例模式要优于静态变量: 静态变量在程序启动的时候 JVM 就会进行加载,如果不使用,会造成大量的资源浪费; 单例模式能够实现懒加载,能够在使用实例的时候才去创建实例。 开发工具类库中的很多工具类都应用了单例模式,比例线程池、缓存、日志对象等,它们都只需要创建一个对象,如果创建多份实例,可能会带来不可预知的问题,比如资源的浪费、结果处理不一致等问题。 1.2 单例的实现思路 静态化实例对象; 私有化构造方法,禁止通过构造方法创建实例; 提供一个公共的静态方法,用来返回唯一实例。 1.3 单例的好处 只有一个对象,内存开支少、性能好; 避免对资源的多重占用; 在系统设置全局访问点,优化和共享资源访问。 二、 单例模式的实现 饿汉模式 懒汉模式 双重检查锁模式 静态内部类单例模式 枚举类实现单例模式 2.1 饿汉模式 在定义静态属性时,直接实例化了对象 public class HungryMode { /** * 利用静态变量来存储唯一实例 */ private

SpringBoot 2.0 系列005 --启动实战之SpringApplication应用

倖福魔咒の 提交于 2019-11-29 02:01:09
SpringBoot 2.0 系列005 --启动实战之SpringApplication应用 2.X 官方示例 注意是只使用了@EnableAutoConfiguration,默认是只扫描这一个我们自定义的类到bean中。不含子包和本包。下一篇我们分析原因。 package hello; import org.springframework.boot.*; import org.springframework.boot.autoconfigure.*; import org.springframework.stereotype.*; import org.springframework.web.bind.annotation.*; @Controller @EnableAutoConfiguration public class SampleController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } public static void main(String[] args) throws Exception { SpringApplication.run(SampleController.class, args); } } 拆分步骤 在之前的文章中我们提到

python课堂整理33----面向对象(我的对象又在哪里)

半城伤御伤魂 提交于 2019-11-29 01:47:24
一、面向对象设计(Object Oriented Design) 将一类具体事物的数据和动作整合到一起,即面向对象设计 理解两个概念: 类:把一类事物的相同的特征和动作整合到一起就是类,类就是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的),也就是特征和动作整合到一起 例: def people(gender,country): #定义一个“人”的类 def init(gender, country): #相当于初始化 dir = { #人的特征和动作 "gender":gender, "country": country, "eat": eat, "sleep":sleep } return dir def eat(dir): print("%s %s正在吃饭"%(dir["country"], dir["gender"])) def sleep(dir): print("%s %s正在睡觉"%(dir["country"], dir["gender"])) return init(gender, country) p1 = people("man", "China") #得到的是一个字典 p1["eat"](p1) #通过字典取值调用函数,函数需要的参数在字典里 p2 = people("女人", "日本") p2["sleep"](p2)    二

java反射(四)--反射与简单java类

谁说我不能喝 提交于 2019-11-28 23:01:03
一.传统简单java类   简单的java类主要是由属性所组成,并且提供有相应的setter以及getter的处理方法,同时简单java类最大的特征就是通过对象保存相应的类的属性内容,但是如果使用传统的简单java类的开发,那么也会面临非常麻烦的困难: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename; 7 } 8 9 public void setJob(String job) { 10 this.job = job; 11 } 12 13 public String getEname() { 14 return ename; 15 } 16 17 public String getJob() { 18 return job; 19 } 20 } --按照传统的做法,首先应该实例化Emp对象,而后通过实例化对象进行setter方法的调用来设置属性的内容: 1 class Emp{ 2 private String ename; 3 private String job; 4 5 public void setEname(String ename) { 6 this.ename = ename

图解Java类加载机制

六眼飞鱼酱① 提交于 2019-11-28 20:46:18
文章目录 前言 类加载的概述 双亲委派加载机制 类加载的隔离机制 contextClassLoader SPI用处 找文件用处 类加载的顺序 顺序概述 类加载的一般方式 类加载的触发点 类的实例化 多线程环境下,为何也只有一个Class的对象 图解和举例 普通Java应用 日常Web应用 附录 前言 网上有很多的Java类加载机制的介绍, 但是对于初学者而言看起来都太过于深疏, 因此在本文用图解和例子的方式为本文的读者介绍Java的类加载机制。 类加载的概述 双亲委派加载机制 委派模型介绍: 双亲委派模型的工作流程是:如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把请求委托给父加载器去完成,依次向上,因此,所有的类加载请求最终都应该被传递到顶层的启动类加载器中,只有当父加载器在它的搜索范围中没有找到所需的类时,即无法完成该加载,子加载器才会尝试自己去加载该类。 通俗的理解就是: 遇见一个类需要加载的类,它会优先让父加载器去加载。层层传递。 每个类加载器都有自己的加载区域,它也 只能 在自己的加载区域里面寻找。 自定义类加载器也必须实现这样一个双亲委派模型。 双亲委派机制是隔离的关键, 如 String.class : 一个JVM里面只能有一个 String.class 。 用户没法自定义个 String.class 出来。

java反射(三)--反射与操作类

人走茶凉 提交于 2019-11-28 20:39:27
一.反射与操作类   在反射机制的处理过程之中不仅仅只是一个实例化对象的处理操作,更多的情况下还有类的组成的操作,任何一个类的基本组成结构:父类(父接口),包,属性,方法(构造方法,普通方法) --获取类的基本信息   一个类的基本信息主要包括的是所在的包名称,父类的定义,父接口的定义. --范例:定义一个程序类 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public interface IMessageStrvice { //消息服务 8 void send(); 9 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public interface IChannelService { 8 boolean connect(); 9 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class AbstractBase { 8 } 1 package 反射.反射与操作类; 2 3 /** 4 * @author : S K Y 5 * @version

java反射(二)--反射应用案例

走远了吗. 提交于 2019-11-28 20:21:34
一.反射实例化对象   经过一系列的分析之后发现虽然可以获取Class类的实例化对象,但是依然觉得这个对象的获取意义不是很大,因此可以通过以下几个案例去理解反射的核心意义 --反射实例化对象:获取Class对象之后最大的意义并不是在于只是一个对象的实例化操作形式,更重要的是Class类中提供有一个对象的反射实例化方法,在JDK1.9之前的实例化:public T newInstance() throw InstantiationException,IllegalAccessException,该方法代替了new 关键字的使用,但是在JDK1.9之后则发生了变化:class.getDeclaredConstructor().newInstance(); --范例:通过newInstance()方法实例化对象 1 package 反射.认识反射机制.entity; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class Person { 8 public Person() { //任何情况下只要实例化对象则一定要调用类中的构造方法 9 System.out.println("Person对象实例化了"); 10 } 11 12 @Override 13 public String toString() {

为什么用枚举类来实现单例模式越来越流行?

让人想犯罪 __ 提交于 2019-11-28 18:45:09
前言 单例模式是 Java 设计模式中最简单的一种,只需要一个类就能实现单例模式,但是,你可不能小看单例模式,虽然从设计上来说它比较简单,但是在实现当中你会遇到非常多的坑,所以,系好安全带,上车。 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要由于静态变量,静态变量在程序启动的时候就要创建,会造成大量的资源浪费,好的单例模式不会有这个问题。开发中的很多工具类都应用了单例模式,线程池、缓存、日志对象等,它们都只需要创建一个对象,如果创建多份实例,可能会带来不可预知的问题,比如资源的浪费、结果处理不一致等问题。 单例的实现思路 静态化实例对象 私有化构造方法,禁止通过构造方法创建实例 提供一个公共的静态方法,用来返回唯一实例 单例的好处 只有一个对象,内存开支少、性能好(当一个对象的产生需要比较多的资源,如读取配置、产生其他依赖对象时,可以通过应用启动时直接产生一个单例对象,让其永驻内存的方式解决) 避免对资源的多重占用(一个写文件操作,只有一个实例存在内存中,避免对同一个资源文件同时写操作 ) 在系统设置全局访问点,优化和共享资源访问(如:设计一个单例类,负责所有数据表的映射处理) 单例模式的实现 单例模式的主流写法有饿汉模式、懒汉模式、双重检查锁模式、静态内部类单例模式、枚举类实现单例模式五种方式