__new__ : 这个方法的作用主要是创建一个实例,在创建实例时首先会调用 __new__方法 ,然后调用__init__对实例进行初始化, 如果想修改 __new__ 这个方法,那么最后要 return 调用一下父类的 __new__ 方法,因为里面有创建实例的过程,除非你在自定义的 __new__ 方法中自己实现了创建实例的过程: class Test(object): def __new__(cls, *args, **kwargs): # 第一个参数传进去的是当前类 如果创建实例需要参…
单例的使用: .m 为了方便实用,只要将以下代码定义在header文件或者.pch文件即可: // .h #define singleton_interface(class) + (instancetype)shared##class; // .m #define singleton_implementation(class) \ static class *_instance; \ \ + (id)allocWithZone:(struct _NSZone *)zone \ { \ stati…
实例在创建出来之后,可以动态的添加属性和方法, 那如果想要限制添加的实例属性,可以用一下 __slots__ 这个东西: class Test(object): __slots__ = ('name', 'age') # 用元组保存 t = Test() t.name = 'tt' t.age = t.addr = 'shanghai' >>>t.addr = 'shanghai' AttributeError: 'Test' object has no attribute 'addr'…
在类 里面,其实并没有方法这个东西,所有的东西都保存在属性里面,所谓的调用方法其实是类里面的一个同名属性指向了一个函数(方法),返回的是函数的引用,再用   函数()    这种方式就可以调用它 在调用实例的方法的时候,实际上给对象传过去的只是一个字符串而已, 比如 t = Test() , 假设 func 是 Test类的一个方法,那么 t.func() 是先给类的 __getattribute__ 方法传过去了一个 'func' 字符串 ,经过处理之后返回的是指向 func 函数的引用 ,最…
在servlet中,servlet类是一个单例,在servlet中的成员变量,将会被所有请求共享,同时也有可能存在线程安全问题,如有一个成员变量num,每次方法后市的num自增 package action; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRe…
单例模式在项目开发中使用得比较多,一个单例的模板类显得很有必要,避免每次都要重复定义一个单例类型 //非多线程模式下的一个单例模板类的实现 // template_singleton.h #include <assert.h> template<typename T>class TSingleton{protected: TSingleton() {} ~TSingleton(){} public: static T& GetInstance(); static void…
饿汉式单例 public class Singleton { private Singleton(){} private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } } 懒汉式单例 public class Singleton { private static Singleton instance = null; private Sin…
__init__:当实例化一个类的时候,首相会执行__new__方法创建一个对象,接下来会执行__init__方法对对象的一些属性进行初始化. 所以如果对象有属性,一般会直接写在__init__方法里面: class Test: def __init__(self, a, b): self.a = a self.b = b test = Test(a, b) __str__:当实例化一个类之后,就有了一个对象的引用,如 test = Test() 这个时候如果直接print(test),输出的是…
一.前言 在上一篇C++基础博文中讨论了C++最基本的代码重用特性——类继承,派生类可以在继承基类元素的同时,添加新的成员和方法.但是没有考虑一种情况:派生类继承下来的方法的实现细节并不一定适合派生类的需求,此时派生类需要重载集成方法. 二.重载方法及虚函数     我们讨论<C++ Primer Plus>中的如下场景:银行记录客户信息,包括客户姓名.当前余额.客户这一类别当然能够创建客户对象.存款.取款以及显示信息.银行需要特殊记录具有透支权限的客户,因此这一类别的客户要额外记录透支上限.…
类的加载:时间 1.创建对象实例(new 一个新对象时) 2.创建子类对象实例,父类也会被加载 3.使用类的静态成员时(静态属性,静态方法) 一.static 静态变量:类变量,静态属性(会被该类的所有对象共享) 1.静态类变量可以根据类名共享,static类变量在类加载的时候就生成了 2.类变量是该类的所有对象共享的,而实例变量是每个对象共享的. 3.加上static称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量 4.类变量可以通过 类名.类变量名 或者 对象名.类变量名 来访问…