新零售指的就是新型零售商业模式,将线上与线下进行融合,消费者可以从线上进行选物,然后到线下门店进实际体验,另外还可以通过大数据来了解消费者的消费习惯,从而提供更加完善的服务。
新零售即企业以互联网为依托,通过运用大数据、人工智能等先进技术手段,对商品的生产、流通与销售过程进行升级改造,进而重塑业态结构与生态圈,并对线上服务、线下体验以及现代物流进行深度融合的零售新模式。
通过Python C API来创建
通过类型对象来创建
Python对外提供了C API,分为两种:
AOL,(Abstract Object Layer),形式如PyObject_*形式,可以应用在任何Python对象上
PyObject*intObj=PyObject_New(PyObject,&PyInt_Type)
COL(Concrete Object Layer)只能作用于某一种类型的对象上,对于内建对象都有一套API
PyObject*intObj=PyInt_FromLong(10)
对于自定义的类型,比如Class A(object)定义的类型A,要创建其对象,由于Python不可能事先提供
PyA_New这样的API,他将会通过A所对应的类型对象来创建实例对象。
下面我们举例创建整数对象的函数调用流程(如图):
PyInt_Type中的tp_new会被调用,如果tp_new是空,会到基类找tp_new
tp_new会访问PyInt_Type中记录的tp_basicsize信息,完成申请内存的操作
之后调用tp_init,完成初始化的操作
Python利用C语言实现了对象的多态性,Python内部在创建对象时会使用PyObject*取保存和维护这个对象,(所有对象的头部是相同的),因此直接可以使用该指针所指对象的ob_type域动态去判断,正是这个域的存在,Python实现了多态性。
我们来分析一下:
void Print(PyObject*object){
object->ob_type.tp_print(object);
}
如果指针本身是一个PyIntObject*,就会调用到PyIntObject的类型对象中定义的输出操作,
如果是一个PyStringObject*,就会调用到PyStringObject对象对应的类型对象中定义的输出操作。
1.4引用计数
Python内建了垃圾回收机制,进行较为繁重的内存管理工作,引用计数正是Python垃圾回收机制的一部分。
Python中每一个东西都有一个ob_refcnt变量,维护着引用计数,决定着对象的创建和消亡。
通过Py_INCREF(op)和Py_DECREF(op)两个宏来增加和减少一个对象的引用计数。
当引用计数为0,会调用该对象的tp_dealloc进行析构动作