实例化

Python元类之由浅入深

故事扮演 提交于 2019-12-01 21:38:45
前言 ​ 元类属于python面向对象编程的深层次的魔法,非常重要,它使我们可以更好的掌控类从创建到消亡的整个生命周期过程。很多框架的源码中都使用到了元类。例如 Django Framework 中的 ORM engine. 白类 === 普通的自定义类 什么是元类 面向对象编程最重要的一句话: 一切皆对象 过去我们都 是这样创建类的: class Panda(object): hobby= "study python" def __init__(self, name, age): # initialize self.name = name self.age = age def __str__(self): # format return "My name=%s, age=%s"%(self.name, self.age) 然后再实例化获得 对象 suosuo = Panda("suosuo", 120) print(suosuo) # "My name=suosuo, age=120" print(type(suosuo)) # <class '__main__.Panda'> 都说了一切皆对象,那请问 类:<class '__main__.Panda'> 也该是一个对象吧! 答:没错,创建这个 Panda 类 的 类 我们称之为 元类 , 也就是 这个 Panda

C# 实例化类的执行顺序

♀尐吖头ヾ 提交于 2019-12-01 19:20:49
原链接 : https://www.cnblogs.com/nzbbody/archive/2011/12/29/2306403.html C# 实例化类的执行顺序 先进行细分: 类的成员分为:字段、属性、方法、构造方法 成员的修饰符:静态成员、实例成员 层次结构:父类、子类 先不考虑继承关系,执行顺序为: 静态字段 静态构造方法 实例字段 实例构造方法 属性和方法是在调用的时候才执行,这里就不考虑了。如何理解上面的执行过程?假如让我来设计执行过程,我该如何考虑,依据是什么? 首先,静态的东西是大家共享的,也就是相同的。应该先关心共享的东西,再关系个人的东西。“先公后私”,呵呵。 其次,实例化之前,应该先初始化自己的内部数据。 现在考虑继承关系,执行顺序为: 子类的静态字段 子类的静态构造方法 子类的实例字段 父类的静态字段 父类的静态构造方法 父类的 实例字段 父类的 实例构造方法 子类的实例构造方法 在子类的实例字段和子类的实例构造方法之间,加入了父类的执行顺序。这个其实也很好理解:在子类的实例构造方法之前,确实需要知道父类的信息,因为子类要从父类那里继承一些东西。这就好比,没有老子,哪来的儿子呢,呵呵。 这里需要特别注意的是,并不是每次实例化都是上面的顺序。因为静态的成员只是在第一次实例化的时候执行,以后再实例化都不会在执行。很好理解,静态的成员意味着大家共享,且只有这一个

python学习,day5:面向对象

吃可爱长大的小学妹 提交于 2019-12-01 12:20:47
面向对象介绍 世界万物,皆可分类 世间万物,皆为对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性 例子: 人:思考,说话,吃喝拉撒。 特性: class类 一个类及时对一类拥有相同属性的抽象、蓝图、原型。在类中定义了这些对象的都具有的属性(variables(data)),共同方法 object对象 一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像 人类是指所有人,每个人是指具体的对象, 人与人之间有共性,亦有不同。 封装 在类中对数据的赋值,内部调用外部用户是透明的,这使类变成了一个胶囊或器官,里面包含着累的数据和方法。 继承 一个类可以派生出自雷,在这个父类里定义的属性,方法自动被自雷集成 多态 一个接口,多种实现 语法: 属性 方法 构造函数 析构函数 私有方法,私有属性 类变量 实例变量 来源: https://www.cnblogs.com/bbgoal/p/11685226.html

在静态方法中访问类的实例成员

*爱你&永不变心* 提交于 2019-12-01 12:10:57
1 public class Test3 { 2 //类的实例变量 3 int x=1; 4 //类的静态变量初始值为2 5 static int y=2; //类的静态变量初始值为2 6 //静态方法 7 public static void out() { 8 System.out.println("类的实例化变量x:"+new Test3().x); //必须通过类的实例化来访问x 的值 9 System.out.println("类的静态变量y:"+y); 10 } 11 public static void main(String[] args) { 12 Test3.out(); 13 Test3 t=new Test3(); 14 System.out.println("x="+t.x); 15 System.out.println("y="+t.y); 16 } 17 18 } 运行结果如下: 类的实例化变量x:1 类的静态变量y:2 x=1 y=2 来源: https://www.cnblogs.com/cxy0210/p/11684879.html

Java的23种设计模式,详细讲解(一)

橙三吉。 提交于 2019-12-01 10:20:15
本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门 : https://mp.weixin.qq.com/s/JzddfH-7yNudmkjT0IRL8Q 一、概述 设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。 拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 1. 单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延迟实例化,这样做的好处是,如果没有用到该类,那么就不会实例化 uniqueInstance,从而节约资源。 这个实现在多线程环境下是不安全的,如果多个线程能够同时进入 if (uniqueInstance == null) ,并且此时 uniqueInstance 为 null,那么会有多个线程执行

修饰者模式(装饰者模式,Decoration)

丶灬走出姿态 提交于 2019-12-01 09:55:16
转自: https://www.cnblogs.com/aspirant/p/9082858.html BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。 ApplicationContext接口,它由BeanFactory接口派生而来,ApplicationContext包含BeanFactory的所有功能,通常建议比BeanFactory优先 BeanFactory和FactoryBean的区别 BeanFactory是接口,提供了OC容器最基本的形式,给具体的IOC容器的实现提供了规范, FactoryBean也是接口,为IOC容器中Bean的实现提供了更加灵活的方式,FactoryBean在IOC容器的基础上给Bean的实现加上了一个简单工厂模式和装饰模式(如果想了解装饰模式参考: 修饰者模式(装饰者模式,Decoration) 我们可以在getObject()方法中灵活配置。其实在Spring源码中有很多FactoryBean的实现类. 区别:BeanFactory是个Factory,也就是IOC容器或对象工厂,FactoryBean是个Bean。在Spring中,

spring加载bean流程解析

南楼画角 提交于 2019-12-01 09:52:13
本篇博客的目录: 一:spring读取配置或注解的过程 二:spring的bean的生命周期 三:spring的BeanPostProcessor处理器 四:一些关键性的问题 五:测试 六:总结 一:spring读取配置或注解的过程 1:先通过扫描指定包路径下的spring注解,比如@Component、@Service、@Lazy @Sope等spring识别的注解或者是xml配置的属性(通过读取流,解析成Document,Document)然后spring会解析这些属性,将这些属性封装到BeanDefintaion这个接口的实现类中. 在springboot中,我们也可以采用注解配置的方式: 比如这个配置Bean,spring也会将className、scope、lazy等这些属性装配到PersonAction对应的BeanDefintaion中.具体采用的是BeanDefinitionParser接口中的parse(Element element, ParserContext parserContext)方法,该接口有很多不同的实现类。通过实现类去解析注解或者xml然后放到BeanDefination中,BeanDefintaion的作用是集成了我们的配置对象中的各种属性,重要的有这个bean的ClassName,还有是否是Singleton、对象的属性和值等(如果是单例的话

工厂模式

拜拜、爱过 提交于 2019-12-01 08:49:05
Duck duck = new MallardDuck() Duck duck 使用接口让代码具有弹性 new MallardDuck() 但是还是得建立具体类的实例 当有一群相关的具体类时,必须等到运行时才知道该实例化哪一个,所以代码里会有很多 if else 工厂类封装创建对象的代码 静态工厂 优点:不需要使用创建对象的方法来实例化对象 缺点:不能通过继承来改变创建方法的行为 来源: https://www.cnblogs.com/jialilue/p/11674115.html

[设计模式] 单例模式

人盡茶涼 提交于 2019-12-01 07:57:31
一 简介   单例模式是一种常用的软件设计模式,其定义是单例对象的类只能允许一个实例存在。   许多时候整个系统只需要拥有一个全局的对象,这样有利于我们协调系统整体的行为。   比如在某个服务器程序中,该服务器的配置信息存放在一个文件中,这些配置数据由一个单例对象统一读取,然后服务进程中的其他对象再通过这个单例对象获取这些配置信息。这种方式简化了在复杂环境下的配置管理。 二 基本的实现思路   单例的实现主要是通过以下两个步骤:     1、将该类的 构造方法定义为私有方法 ,这样其他处的代码就无法通过调用该类的构造方法来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例;     2、在该类内提供一个静态方法,当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用。 三 注意事项   单例模式在多线程的应用场合下必须小心使用。如果当唯一实例尚未创建时,有两个线程同时调用创建方法,那么它们同时没有检测到唯一实例的存在,从而同时各自创建了一个实例,这样就有两个实例被构造出来,从而违反了单例模式中实例唯一的原则。 解决这个问题的办法是为指示类是否已经实例化的变量提供一个互斥锁(虽然这样会降低效率)。 四 单例模式的几种写法 1 饿汉模式(静态变量)【可用】 /** * 单例模式 - 饿汉模式 */

IoC 之加载 Bean:总结

无人久伴 提交于 2019-12-01 07:51:18
上文中我们将bean已经加载到了IOC容器中,接下来我们将把IOC加载Bean出来进行代码解析 备注:(有些解释是参考别个博客的相关解释 )一起探讨请加我QQ:1051980588 bean 的初始化节点,由第一次(显式或者隐式)调用 #getBean(...) 方法来开启,所以我们从这个方法开始。代码如下: 1 // AbstractBeanFactory.java 2 3 public Object getBean(String name) throws BeansException { 4 return doGetBean(name, null, null, false); 5 } 6 7 protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType, 8 @Nullable final Object[] args, boolean typeCheckOnly) throws BeansException { 9 // <1> 返回 bean 名称,剥离工厂引用前缀。 10 // 如果 name 是 alias ,则获取对应映射的 beanName 。 11 final String beanName = transformedBeanName(name); 12