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()