python多态性,python中多态的定义
多态性是指通过基类的指针或引用,在运行时动态调用实际绑定对象函数的行为。
对于C等其他语言来说,多态是通过在基类中的函数前添加虚拟关键字来重写派生类中的函数,运行时会根据对象的实际类型调用相应的函数。如果对象类型是派生类,则调用派生类的函数;如果对象类型是基类,则调用基类的函数。
a类
{
公共:
virtualvoidshow()
{
cout A
}
};
classB:publicA
{
公共:
voidshow()
{
cout B
}
};
intmain()
{
a* p=newB();//父类指针指向子类对象
p-show();
}相关推荐:《Python平台》
而在python中,可以这样写:
classA:
defsay(self):
打印(“A”)
b类:
defsay(self):
打印(“B”)
国防预算:
说
a=A()
说(一)那么,内部是怎么实现的呢?
首先,我们来看看Python源代码中object.h文件的顶部注释:
在第一句中,它说对象总是通过指针PyObject *来访问的。那么什么是PyObject呢?
在Python中,一切都是一个对象,在PyObject内部是所有对象拥有的相同内容。
让我们来看两个结构:
typedefstruct_object{
_ PyObject _ HEAD _ EXTRA
Py _ ssize _ tob _ refcnt
struct _ typeobject * ob _ type
} PyObject
typedefstruct{
PyObjectob _ base
Py _ ssize _ tob _ size/* numberofitemsinvariable part */
} PyVarObject第一个是PyObject,第二个我们从它的名字就可以知道,是一个可变的对象结构,它包含了一个PyObject和所包含元素的个数。
当我们创建一个对象时,我们为初始化分配内存。此时,PyObject类型的指针变量将用于指向该内存,以便存储和维护。
就像我们声明一个integer,得到一个integer对象,用来指向这个内存地址的不是PyIntObject *而是PyObject *。
其实类型本身也是一个对象,PyTypeObject。当我们实例化一个整数对象时。PyIntObject的ob_type指针指向PyInt_Type,而PyInt _ Type又指向PyType_Type。而PyInt_Type和PyType_Type实际上是PyTypeObject的例子。
所以我们在传递对象的时候,传递的是泛型指针PyObject *,只能通过ob_type来判断对象类型。通过传递泛型指针,我们实现了Python的多态性。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。