zoukankan      html  css  js  c++  java
  • 元类认知

    python 一切皆对象

    元类构造方法

    class Foo:
        pass
    
    print(type(Foo))
    
    # 一般类默认都是由type创建
    Base = type('Base',(object,),{'name':'alex','func1':lambda x:x+1})
    '''
    :param 第一个参数是类名  第二个是一个元组 里边写着它集成的类 ,第三个参数是属性和方法
    
    '''
    print(Base)

    也可以通过meat_class指定由谁来创建

    class Mytype(type):
    
        def __init__(self,*args,**kwargs):
            print('创建前')
            super().__init__(*args,**kwargs)
            print('创建后')
    
    class Foo(object,metaclass=Mytype):
    
        city = 'bj'
    
        def func(self,x):
            return x+1

    根据元类创建的单例模式

    在类实例化的时候会先执行metaclass类的__call__方法

    class Singleton(type):
        _instances = {}
        def __call__(cls, *args, **kwargs):  # 他的实例化出来的类实例化时调用了这个方法,
            if cls not in cls._instances: 
                # 如果这个来没有实例化对象,就去执行type的__call__方法,并且把实例存储在cls._instances中
                cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
            return cls._instances[cls]  # 返回实例
     
    class MyClass(metaclass=Singleton):
       pass
     
    a = MyClass()
  • 相关阅读:
    Docker入门
    服务配置中心
    zuul网关
    git2
    git1
    git
    shiro授权、注解式开发
    shiro认证-SSM
    Shiro入门
    Springmvc之文件上传
  • 原文地址:https://www.cnblogs.com/zjchao/p/8980618.html
Copyright © 2011-2022 走看看