zoukankan      html  css  js  c++  java
  • 元类

    什么是元类?

             可以实例化出类的类叫元类。

    类的组成:

    1. 类名 2.基类们 3.类的名称空间(执行类体代码而得到的)
    案例:
    class_name='Teacher'
    class_body='''
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def say(self):
        print('%s says welcome to the Beijing' % self.name)
    '''
    class_dict={}
    exec(class_body,{},class_dict)
    bases=(object,)
    res=Teacher=type(class_name,bases,class_dict)
    print(res)

    一个类没有声明自己的元类时,默认下元类是type

    自定义元类:只有继承了type类才能称为一个元类,不然就是一个普通类

    class Mymeta(type):
        def __init__(cls,class_name,bases,namespace):
            pass

    --ini--控制类的创建

    --call­--的执行时机是调用对象的时候

    调用一个类,创建出一个空对象,调用一个—init—初始化  返回新对象 (可以添加额外的业务逻辑)

    class Teacher(type):
        def __call__(self, *args, **kwargs):
            obj=object.__new__(self)
            obj.__init__(*args,**kwargs)
            return obj

    class Foo(metaclass=Teacher):
        def __init__(self,name):
            self.name=name

    t=Foo('张三')
    print(t)

             字符串的判断方法:1.type(参数)=str  2.isinstance(参数,str)

    什么是单例?

             指单个实例,一个类只能有一个实例对象

    为什么使用单例?

             当一个类的实例中的数据不会变化时,就使用单例

    案例:

    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("你发如雪!")
    # p2=CDPlayer("人生如梦")
    p1.play("菊花台")
  • 相关阅读:
    Java基础(九)--反射
    Java基础(八)--String(源码)、StringBuffer、StringBuilder
    Java基础(七)--Exception异常处理
    Java基础(五)--内部类
    Redis系列(十一)--阿里云开发规范
    Java基础(四)--接口和抽象类
    Java基础(三)--final关键字
    生成count个[0-n)不重复的随机数
    Java基础(二)--this关键字及初始化
    十大Intellij IDEA快捷键(附IDEA快捷键详细列表及使用技巧)
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/10029047.html
Copyright © 2011-2022 走看看