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("菊花台")
  • 相关阅读:
    C#开发串口总结,并提炼串口辅助类到公用类库中
    sharepoint Lists Web service 用法
    .NET简谈策略模式
    细说 Form (表单)
    步步为营 SharePoint 开发学习笔记系列 一、简介
    Memcached进行缓存层设计
    各大主流.Net的IOC框架性能测试比较
    十年磨一剑,BloodyAngel!
    hosts
    新浪微薄的挂件
  • 原文地址:https://www.cnblogs.com/zhouhai007/p/10029047.html
Copyright © 2011-2022 走看看