美文网首页
python元类和三个对象概念

python元类和三个对象概念

作者: LittleTrue | 来源:发表于2018-10-04 23:52 被阅读0次

在python中,关于对象权威的说法是metaclasses,classes,instance三类对象
python中的类,本质上也是一个对象,type就是元类, 除了检测类型的功能外, 也是创建类的类(另外还有创建抽象类的元类ABCmeta)。

python通过type()函数创建类

type()函数既可以返回一个对象的类型,又可以创建出新的类型,比如,我们可以通过type()函数创建出Hello类,而无需通过class Hello(object)...的定义:

要创建一个class对象,type()函数依次传入3个参数:

  • class的名称;
  • 继承的父类集合,注意Python支持多重继承,如果只有一个父类,别忘了tuple的单元素写法;
  • class的方法名称与函数绑定,这里我们把函数fn绑定到方法名hello上。

通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class。


metaclass自定义元类

metaclass,直译为元类,简单的解释就是:

当我们定义了类以后,就可以根据这个类创建出实例,所以:先定义类,然后创建实例。
但是如果我们想创建出类呢?那就必须根据metaclass创建出类,所以:先定义metaclass元类,然后创建类。
连接起来就是:_______
先定义metaclass元类,就可以创建类,最后创建实例。

遵循上面的三部曲, 首先先定义metaclass元类:
# metaclass是创建类,所以必须从`type`类型派生:
class ListMetaclass(type):
    def __new__(cls, name, bases, attrs):
        attrs['add'] = lambda self, value: self.append(value)
        return type.__new__(cls, name, bases, attrs)
注意:

__new__()方法接收到的参数依次是:

  • 当前准备创建的类的对象;
  • 类的名字;
  • 类继承的父类集合;
  • 类的方法集合。
然后创建类
class MyList(list):
    __metaclass__ = ListMetaclass # 指示使用ListMetaclass来定制类
然后实例化对象
#可以正常调用add
L = MyList()
L.add(1)  

相关文章

  • python虚拟机中的类机制

    本文从底层介绍python中的类机制,首先介绍python中类和对象的关系,创建类对象的方式,以及元类的概念,然后...

  • python元类和三个对象概念

    在python中,关于对象权威的说法是metaclasses,classes,instance三类对象python...

  • metaclass初探

    要理解python中的元类的概念,首先要清楚类的概念。首先,python中类是对象,当用class关键字声明的时候...

  • python 类

    类 用来描述具有相同的属性和方法的对象的集合。python中的类就是对象。 python 中的元类详解 创建Dog...

  • IOS类分析(一)

    与类相关的概念有,对象,类,元类对象由类生成,类由元类生成对象可以有多个,类都是单例。 苹果官方isa走位图和继承...

  • 2018-07-31Python (11)

    python 基础语法(11) 面向对象 概念 面向对象最重要的概念就是类和实例,类是实例的抽象,而实例是类的具象...

  • python重要知识点总结一

    内容包含: 元类 python 对象和类的绑定以及类方法,静态方法 python 子类调用父类方法总结 pytho...

  • 23.Python之面向对象(类与对象)

    Python之类与对象 类类:用来描述具有相同的属性和方法的对象的集合(在Python中类与类型是一个概念)。特点...

  • 29.Python之面向对象的元类

    Python之面向对象的元类 什么是元类?类的类就是元类,元类创建对象。使用class定义的类,用来产生程序员自己...

  • python中一切皆对象

    Python中的元类和猴子补丁都是基于一切皆对象 函数和类也是对象,属于Python的一等公民 类可以直接实例化对...

网友评论

      本文标题:python元类和三个对象概念

      本文链接:https://www.haomeiwen.com/subject/xgefaftx.html