• 元类


    元类

    元类是类的类,是类的模版。

    元类是控制如何创建类的,正如类是控制如何创建对象的

    type是python中默认的一个内建元素,用来直接控制生成类,python 中任何class定义的类其实都是type类实例化的对象

    class Foo:
    pass
    f1 = Foo()
    print(type(f1))#结果是:<class '__main__.Foo'> 查看实例所属的类
    print(type(Foo))#结果是:<class 'type'> 查看类的类,也就是元类

    创建类的两种方法:

    方法一:元类type创建类

    创建的类名 = type('创建的类名',(所继承的类,),{属性字典})

    def __init__(self,name,age):
    self.name = name
    self.age = age
    def test(self):
    print('=====>')

    Foo = type('Foo',(object,),{'x':1,'__init__':__init__,'test':test})
    #此处将数据属性x=1,和函数属性test ,以及__init__一起加入到类的属性字典中了
    print(Foo)#<class '__main__.Foo'>
    f1 = Foo('alex',18)
    print(f1.name)#alex
    f1.test()#结果是:=====>

    方法二:class创建类

    class Foo:
    x=1
    def __init__(self,name ,age):
    self.name = name
    self.age = age
    def test(self):
    print('=====>')
    f1 = Foo('alex',18)
    f1.test()#结果是:=====>
    print(f1.name)#结果是:alex
    print(Foo)#结果是:class '__main__.Foo'>

    自定义元类

    一个类没有声明自己的元类,python默认它的元类就是type,除了使用元类type,用户可以通过继承的type来自定义元类

    class MyType(type):
    def __init__(self,a,b,c):
    print('元类的构造函数执行')
    # print(a)#Foo
    # print(b)#()
    # print(c)#Foo的属性字典
    def __call__(self, *args, **kwargs):
    # print(self)#结果是:<__main__.MyType object at 0x7f9a43f62b70>
    # 此处self是指Foo
    # print(args,kwargs)#此处args是指('alex',) kwargs是{}
    obj = object.__new__(self)#object.__new__(Foo)
    # 此代码是给FOO产生一个对象,即生成一个实例,即;产生f1
    self.__init__(obj,*args,**kwargs)#Foo.__init__(f1,*args,**kwargs)
    return obj



    class Foo(metaclass=MyType):#Foo=MyType(Foo,'Foo',(),{})
    def __init__(self,name):#此处self是指实例:f1
    self.name =name #f1.name =name


    #print(Foo)#<__main__.MyType object at 0x7fde5d062b70>
    # Foo()#会触发call 方法
    f1= Foo('alex')#实例化会触发call方法,以及init方法
    print(f1.__dict__)#{'name': 'alex'}

     

     

     

     

     

     

     

  • 相关阅读:
    C++ Compress Floder
    C语言: 两个int变量相除,结果保留两位小数
    过滤Windows文件名中的非法字符
    判断两个vector是否相等
    顶级操盘手是怎样准确把握入场时机的
    短线黑马选股绝技
    短线黑马选股绝技 一
    每日一招:短线炒股实用技巧
    高抛低吸T+0操作要领(目前行情短线炒作的必备技能)
    如何买开盘即涨停的个股
  • 原文地址:https://www.cnblogs.com/wode110/p/14866826.html
Copyright © 2020-2023  润新知