Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我们在python中使用多态性和抽象类 我首先学习C++中的多态性,C++中我们有每个变量的类型。所以我们使用多态性来获得一个指针,它可以指向不同类型的对象,我们可以很好地使用它们_Python_Oop_Inheritance_Polymorphism - Fatal编程技术网

为什么我们在python中使用多态性和抽象类 我首先学习C++中的多态性,C++中我们有每个变量的类型。所以我们使用多态性来获得一个指针,它可以指向不同类型的对象,我们可以很好地使用它们

为什么我们在python中使用多态性和抽象类 我首先学习C++中的多态性,C++中我们有每个变量的类型。所以我们使用多态性来获得一个指针,它可以指向不同类型的对象,我们可以很好地使用它们,python,oop,inheritance,polymorphism,Python,Oop,Inheritance,Polymorphism,但是我没有python中的多态性和抽象类。在这里,每个变量都可以是一切。它可以是迭代器、列表、单个变量或函数。每件事。那么,是什么让程序员在这里使用抽象类或多态性呢 在C++中,我们用多种方式继承。但在python中,它只是用于使用另一个类方法或属性。我说得对吗?怎么了?你不明白多态性是什么(我是说OO多态调度)。多态性是让不同类型的对象理解相同消息的能力,因此您可以以相同的方式使用这些对象,而不用担心它们的具体类型 C++实际上使用相同的概念(类)来表示两种稍有不同的语义:抽象类型(接口),它

但是我没有python中的多态性和抽象类。在这里,每个变量都可以是一切。它可以是迭代器、列表、单个变量或函数。每件事。那么,是什么让程序员在这里使用抽象类或多态性呢


在C++中,我们用多种方式继承。但在python中,它只是用于使用另一个类方法或属性。我说得对吗?怎么了?

你不明白多态性是什么(我是说OO多态调度)。多态性是让不同类型的对象理解相同消息的能力,因此您可以以相同的方式使用这些对象,而不用担心它们的具体类型

C++实际上使用相同的概念(类)来表示两种稍有不同的语义:抽象类型(接口),它是这种类型的对象可以理解的消息集;具体类型(实现),它定义了这种类型如何对这些消息作出反应

Java清楚地区分了抽象类型(
接口
)和具体类型(

Python是动态类型的,主要依赖于“duck类型”(如果它走路像鸭子,嘎嘎叫像鸭子,那么它就是鸭子——或者至少它是“一种鸭子”。在Python文档中,您经常会发现诸如“类似文件”或“类似dict”之类的术语,意思是“与文件(或dict)具有相同接口的任何东西”,而且相当多的“接口”或多或少是隐式的(或至少长期以来是隐式的)

这些隐式接口的问题在于,它们很少有完整的文档记录,有时必须访问函数源代码才能确切地了解传递的对象需要支持什么。这就是为什么在Python2中引入并在Python3中改进了
abc
模块的原因之一:通过创建一个明确定义接口的抽象基类型,可以更好地记录这些隐式接口

抽象基类(无论是否使用abc模块)的另一个原因是为一组具体的子类提供公共的基类实现。这对于框架特别有用,例如Django的
models.Model
(ORM)或
forms.Form
(用户输入收集和验证)类-在这两种情况下,仅定义数据库或表单字段就足以使某些功能正常工作

<> C++中的继承与类相同,它既定义接口又实现实现。这增加了混乱。。。Java有一个好主意(IMHO),将抽象类型与实现分开,但始终未能将类型限制在接口上——您可以使用类或接口进行类型声明,因此它仍然没有明确区分


在Python中,由于没有静态类型,继承实际上主要是实现重用。abc模块允许您将完全无关的类(无继承关系)注册为定义的抽象基类的子类型,但这里的要点主要是说明您的类实现了相同的接口(并且这不是意外事件…)

我们在其他语言中使用多态性和抽象类的原因也是一样的:根据对象的类型执行不同的操作,并在多个具体类之间共享通用的实现细节。