面向对象-元类

面向对象-元类
  • 类对象
    • 类对象的产生:在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立,但是,Python中的类还远不止如此。类同样也是一种对象,只要你使用关键字class,Python解释器在执行的时候就会创建一个类对象
    •  类对象的功能:
      • 0.创建(实例对象的能力)     “类的功能”
      • 1.你可以将它赋值给一个变量    “对象的功能”
      • 2. 你可以拷贝它       “对象的功能”
      • 3. 你可以为它增加属性       “对象的功能”
      • 4. 你可以将它作为函数参数进行传递       “对象的功能”
  • 动态的创建类
    • 动态创建类:
      • 因为类也是对象,你可以在运行时动态的创建它们,就像其他任何对象一样。首先,你可以在函数中创建类,使用class关键字即可。
    • 1.比较low的方法
      • 示例:
      • 通过调用choose_class 可以实现动态的创建类,类似于实例创建的方法,但是这种方式还是不够动态;
    • 2.type-创建类
      • type的另外一种功能介绍:
        • type可以接受一个类的描述作为参数,然后返回一个类。
      • type创建类对象的格式:
        • type(类名, 由父类名称组成的元组(可以为空),包含属性的字典(名称和值))
        • 示例:
        • 注意:属性可以添加类属性,也可以添加类方法和静态方法和类方法,通过使用装饰器@classmethod和@staticmethod
    • 创建类幕后的事情
      • 在Python中,类也是对象,你可以动态的创建类。这就是当你使用关键字class时Python在幕后做的事情,而这就是通过元类来实现的。
  • 面向对象-元类
    • 元类概念:
      • 在python中了解到对象也是实例,所以实例也应该是由类创建出来的,创建类对象的类就被叫做元类;
      • 通过元类创建出来的类叫做类对象,通过类对象创建出来的对象叫做实例对象
      • type实际上就是一个元类,在创建类的时候,通过type的元类传入参数,创建出想要创建的额类
      • Python中所有的东西,注意,我是指所有的东西——都是对象。这包括整数、字符串、函数以及类。它们全部都是对象,而且它们都是从一个类创建而来,这个类就是type。(python中所有都是type创建出来的)
    • __metaclass__属性:
      • 应用场景:__metaclass__属性应用在需要定义一个元类的时候;
      • 例如:
      • __metclass__作用:
        • 当python解释器在解释的时候,还没创建类对象之前,Python会在类的定义中寻找__metaclass__属性,如果找到了,Python就会用它来创建类Foo,如果没有找到,就会用内建的type来创建这个类,如果找到了就会用__metclass__定义的方法来创建类。
      • 自定义元类的目的:
        • 拦截类的创建,通过调用__metclass__指向的类,去执行对应的__new__方法(如果没有该属性则去执行type的__new__方法)
        • 修改类
        • 返回修改类的结果
      • python解释器执行的步骤
        • 比如当解释如下的代码时,python解释器做了如下的动作:
        • 1.Foo中有__metaclass__这个属性吗?如果是,Python会通过__metaclass__创建一个名字为Foo的类
        • (对象)
        • 2. 如果Python没有找到__metaclass__,它会继续在Bar(父类)中寻找__metaclass__属性,并尝试做
        • 和前面同样的操作。
        • 3. 如果Python在任何父类中都找不到__metaclass__,它就会在模块层次中去寻找__metaclass__,并尝
        • 试做同样的操作。
        • 4. 如果还是找不到__metaclass__,Python就会用内置的type来创建这个类对象。
        • 5.如果找到了__metclass__属性,那么按照__metaclass__定义的方法来创建类(__metaclass__中放置些什么代码呢:type,或者任何使用到type或者子类化type的东东都可以
      • 自定义元类的方法
      • 应用到自定义元类的地方
        • 在使用数据库编程的时候,经常用到自定义元类,叫做orm框架,通过创建出来orm对象来完成和数据库表的匹配,并通过对象来完成对数据库的操作;(以后会做进一步介绍)  附件有orm框架的源码




刘小恺(Kyle) wechat
如有疑问可联系博主