python如何实现多态
发布时间:2025-04-06 15:48:59
多态是指在运行过程中通过基类指针或引用动态调用实际绑定对象函数的行为。
对于C++等其他语言,多态性是在基类函数前添加virtual关键字,在衍生类中重写函数,并根据对象的实际类型调用相应的函数。如果对象类型为衍生物,则调用衍生物函数;如果对象类型为基类,则调用基类函数。
classA { public: virtualvoidshow() { cout<<"A"; } }; classB:publicA { public: voidshow() { cout<<"B"; } }; intmain() { A*p=newB();///父类指针指向子类对象 p->show(); }
相关推荐:Python平台
在python中,可以这样写:
classA: defsay(self): print('A') classB: defsay(self): print('B') defsay(obj): obj.say() a=A() say(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;/*Numberofitemsinvariablepart*/ }PyVarObject;
第一个是Pyobject,第二个是可变对象的结构,包括Pyobject和包含元素的数量部分。
当我们创建一个对象时,我们将分配内存进行初始化。此时,我们将使用Pyobject类型的指针变量来保存和维护这个内存。
就像我们声明一个整数,得到一个整数对象来指向这个内存地址,而不是Pyintobject, *,相反,Pyobjecttectttecttect *。
事实上,类型本身也是一种对象,PyTypeObject。当我们实例化一个整数对象时。Pyintobjectob_type指针指向Pyint___Type,Pyint_Typeob_type指PyType_Type。Pyint_Type和PyType事实上,Type就是PyTypeObject的一个例子。
因此,当我们传递对象时,我们传递Pyobject *我们只能通过ob_type来判断对象的类型,通过传递泛型指针来实现Python的多态性。
下一篇 python单例模式是什么意思