Python-元类 单例


2.元类    用于创建类的类 叫元类   默认元类都是type    主要控制类的创建__init__   类的实例化__call__

3.单例    一个类只有一个实例    什么时候用,大家公用一个打印机,没有必要每个人创建新的打印机对象 共用一个对象即可

===============================

元类是什么?    源自一句话:在python中,一切皆对象,而对象都是由类实例化得到的    本质上元类也是一个类,元类是用于实例化其他类

class Dog:    def __init__(self):        print("狗初始化了")    color = "red"    def talk(self):        print("狗在叫!")d1 = Dog()# print(Dog.__dict__)

# 查看对象时哪个类实例化出来的print(d1.__class__) #<class ‘__main__.Dog‘>print(Dog.__class__) #<class ‘type‘>print(type(d1))  #<class ‘__main__.Dog‘>print(type(Dog)) #<class ‘type‘>

# 一个类必须具备的内容    1.类名    2.基类    3.名称空间

#通过查看__class__ 发现 Dog对象 是由type类示例化得来#既然如此 是不是可以手动调用type来实例化

class_name = "Pig"bases = (object,)pic_dict = {}class_body = """def __init__(self):    print("猪初始化了")

color = "red"

def talk(self):    print("猪在叫!")"""# 执行一堆字符串代码  将生产的内容放到pic_dict中exec(class_body,{},pic_dict)print(pic_dict)# 调用type产生一个类c = type(class_name,bases,pic_dict)print(c)  #<class ‘__main__.Pig‘>print(Dog) #<class ‘__main__.Dog‘>"""    默认情况下  所有的类都是通过type这个元类示例化的    我们完全可以自己来实例化    元类的作用?    用于创建类的类 称为元类"""# 控制类的创建过程 核心函数就是元类中的init函数    # 1.控制类的调用    # 2.单例设计模式

# 调用一个类的创建   创建出一个空对象,调用__init__来完成对象的初始化,返回该对象# 控制类的调用 也就是实例化过程    核心函数 元类中的__call__    # 需要注意的是,在__call__中应当先完成基础的逻辑        1.创建空对象,2.执行__init__ 3.返回新对象    # 在此基础上添加额外的业务逻辑

单例    是一种设计模式    是设计模式中比较简单的    指的是 一个类有且仅有一个实例 就叫单例

实现单例 就通过判断是否已经创建过对象

为什么要使用单例这种模式    之前在创建对象时 每个对象中的数据不相同   对象实际上数据和处理数据的方法的结合体    当对象中的数据是 相同的 共享的 时候 使用单例

u1 = user("张三",29,"man")u2 = user("张三",29,"man")u3 = user("张三",29,"man")不同的对象 有完全相同的数据  没有必要每个人保存一份

u1 = user("张三",29,"man")u2 = u1u3 = u1如此  可以减少资源开销  大家共享一个数据 只有一个对象

单例模板!!!class MyMetaClass(type):

instance = None    def __call__(cls, *args, **kwargs):        if not MyMetaClass.instance:            # 创建空对象            MyMetaClass.instance = object.__new__(cls)            print("创建新的播放器对象!")            #初始化对象            MyMetaClass.instance.__init__(*args,**kwargs)            # 返回对象        return MyMetaClass.instance

# 只能有一个播放器实例class CDPlayer(metaclass=MyMetaClass):    def play(self,music):        print("切换音乐",music)    def __init__(self,music_name):        self.music_name = music_name

p1 = CDPlayer("你发如雪!")p1.play("菊花台")p1.play("菊花台2")p1.play("菊花台3")

# 不会创建新对象p1 = CDPlayer("你发如雪!")p1 = CDPlayer("你发如雪!")p1 = CDPlayer("你发如雪!")p1 = CDPlayer("你发如雪!")

# 元类实现单例 就是拦截了元类中的__call__的正常执行  使得创建对象都必须经过自己判断逻辑

原文地址:https://www.cnblogs.com/du-jun/p/10029086.html

时间: 2024-10-09 09:37:31

Python-元类 单例的相关文章

29 内置方法 eval | exec 元类 单例

eval与exec内置方法 将字符串作为执行目标,得到响应结果 eval常用作类型转换:该函数执行完有返回值 exec拥有执行更复杂的字符串:可以形成名称空间 eval内置函数的使用场景:   1.执行字符串会得到相应的执行结果   2.一般用于类型转化,得到dict.list.tuple等 dic_str = "{'a': 1, 'b': 2, 'c': 3}" print(eval(dic_str)) list_str = "[1, 2, 3, 4, 5]" p

音频类 单例

.h文件 #import <Foundation/Foundation.h> @interface PLMsoundTool : NSObject<NSCopying> - (void)playSongWithName:(NSString *)name; + (instancetype)shareSoundTool; @end .m文件 #import "PLMsoundTool.h" #import <AudioToolbox/AudioToolbox.

python元类__metaclass__

<pre name="code" class="python">#python元类,类的创建过程 #首先调用type.__new__ #然后调用类的构造函数 class.__init__ def toString(c): s=""; if type(c)==tuple: s="tuple:" for i in c: s+=str(i) s+="," return s elif type(c) =

正则表达式工具类单例

/// <summary> /// 正则表达式工具类单例 /// </summary> public class RegexTool { private static volatile RegexTool regex = null; private static object syncRoot = new Object(); /// <summary> /// 注册需要转换的类型 /// </summary> private RegexTool() { }

转--python 中写单例

原文地址 原文地址2 Python中的单例模式的几种实现方式的及优化 阅读目录(Content) 单例模式 实现单例模式的几种方式 1.使用模块 2.使用装饰器 3.使用类 4.基于__new__方法实现(推荐使用,方便) 5.基于metaclass方式实现 相关知识 实现单例模式 回到顶部(go to top) 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对

python元类深入解析

元类 什么是元类 元类是类的类,是类的模板(就如对象的模板是类一样) 元类的实例为类,类的实例为对象 元类是用来产生类的 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,是运行时动态创建的 __new__() 我们之前说类实例化第一个调用的是__init__,但__init__其实不是实例化一个类的时候第一个被调用 的方法.当使用 Persion(name, age) 这样的表达式来实例化一个类时,最先被调用的方法 其实是 __new__方法. __new__方法接受的参数虽

python元类分析

刚开始接触到Python新式类中的元类的概念的时候很是纠结了下..不知道这是个啥东西... 用以下几个定义来说明吧: (1)Python中,类也是对象..只不过这种对象比较的特殊,他用于创建别的对象 (2)元类也是一种类,只不过它更特殊...他是用来创建别的类的类...(呵呵,是不是很拗口) 先来看一段代码吧: class Fjs(object): def __init__(self, name): self.name = name def hello(self): print "hello b

python 元类的简单解释

本文转自博客:http://www.cnblogs.com/piperck/p/5840443.html 作者:piperck python 类和元类(metaclass)的理解和简单运用 (一) python中的类 首先这里讨论的python类,都基于继承于object的新式类进行讨论. 首先在python中,所有东西都是对象.这句话非常重要要理解元类我要重新来理解一下python中的类 class Trick(object): pass 当python在执行带class语句的时候,会初始化一

转 java 类 单例

转 单例概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都或多或少具有资源管理器的功能.每台计算机可以有若干个打印机,但只能有一个Pr