多态

类的多态和抽象类

雨燕双飞 提交于 2019-12-06 00:07:37
一、多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 序列数据类型有多种形态:字符串,列表,元组 动物有多种形态:人,狗,猪 2.多态的目的: “多态” 也称之为 “多态性”,目的是为了 在不知道对象具体类型的情况下,统一对象调用方法的规范(比如:名字)。 多态的表现 “形式之一” 就是继承: - 先抽象,再继承 父类: 定制一套统一的规范。(比如: 方法名统一) 子类: 遵循父类的统一的规范。(比如: 子类遵循父类方法名的统一) 注意: 在python中不会强制限制 子类 必须要遵循 父类 的规范,所以出现了抽象类。 动物的多种形态 # 动物类 class Animal: # 方法 吃 def eat(self): pass # 方法 叫 def speak(self): pass # 猪类 class Pig(Animal): def eat(self): print('bia唧...') def speak(self): print('哼哼哼...') # 猫类 class Cat(Animal): def eat(self): print('咬ji 咬ji....') def speak(self): print('喵喵喵...') # 狗类 class Dog(Animal): def eat(self): print('舔 ji

多态,鸭子模型

醉酒当歌 提交于 2019-12-06 00:01:58
目录 多态 鸭子类型 多态 多态指的是同一种类型的事物,不同的形态 多态的目的: 多态也称之为‘多态性’, 目的是为了 在不知道对象具体类型的情况下,统一对象调用的方法规范 (比如:名字) 多态的表现“形式之一”就是继承 ​ 先抽象,再继承 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物 @abc.abstractmethod def talk(self): pass class People(Animal): #动物的形态之一:人 def talk(self): print('say hello') class Dog(Animal): #动物的形态之二:狗 def talk(self): print('say wangwang') class Pig(Animal): #动物的形态之三:猪 def talk(self): print('say henghengheng') Python的多态性是指: 在不考虑实例类型的情况下使用实例,也就是说不同类型的实例有 相同的调用方法 。比如人,猫,狗,等等只要是继承了animal就可以直接调用它的talk()方法 peo=People() dog=Dog() pig=Pig() #peo、dog、pig都是动物,只要是动物肯定有talk方法

python之多态、抽象类、鸭子类型

风格不统一 提交于 2019-12-05 23:45:38
''' 1.什么是多态? 多态指的是同一类型的事物,不同的表现形式。 2.多态的目的: 多态 也称为多态性,目的是为了在不知道对象的具体类型的情况下,同一调用属性或方法的规范。 继承是实现多态的方法之一。 - 先抽象,再继承 父类:定制一套统一的规范 子类:遵循父类统一的规范。 注意:再python中不会强制限制子类必须遵循父类的规范。(要引入抽象类) ''' class Animal: def eat(self): pass def bark(self): pass class Tiger(Animal): def eat(self): print(self.__class__.__name__, 'is eating something') def bark(self): print(self.__class__.__name__, 'is barking...') class Cat(Animal): def eat(self): print(self.__class__.__name__, 'is eating something') def bark(self): print(self.__class__.__name__, 'is barking...') class Lion(Animal): def eat(self): print(self.__class__._

多态,抽象类,鸭子类型,classmethod和staticmethod,isinstance与issubclass和反射

瘦欲@ 提交于 2019-12-05 23:36:15
多态 多态指的是同一种类型的事物,不同的形态 多态的目的: 多态也称之为多态性,目的是为了在不知道对象具体类型的情况下,统一对象调用方法的规范(例如名字) 多态的表现形式之一就是继承: 先抽象,再继承 父类:定制一套统一的规范 如方法名统一 子类:遵循父类的统一的规范 如子类遵循父类方法名的统一 ps:在python中不会强制限制 子类必须要遵循 父类的规范,所以出现了抽象类 class Father: def func1(self): pass def speak(self); pass class Sub1(Father): def func1(self): pass def speak(self): pass class Sub2(Father): def func1(self): pass def speak(self): pass 抽象类 什么是抽象类: 在python内置的abc模块中,有一个抽象类 抽象类的作用: 让子类必须遵守父类的编写规范 如何实现抽象类: -父类需要继承abc模块中,metaclass = adb.ABCMeta -在父类的方法中,需要装饰上 abc.abstractmethod 注意:在python中不推荐使用抽象类 注意: 子类必须按照父类的方法编写规范,缺一不可。父类中有几个抽象方法,子类就必须要定义几个 import abc 错误示范 #

面向对象之多态

余生长醉 提交于 2019-12-05 23:32:14
今日学习总结: 一、多态: 01.什么是多态? 多态指的是同一种类型的事物,不同的形态。 -动物 猪 狗 猫 -笔 铅笔 钢笔 毛笔 02.多态的目的? 多态 也称之为 多态性,目的是为了 在不知道对象具体的类型的情况下,统一对象调用方法的规范。 多态的表现 形式之一 就是继承: 先抽象,再继承 父类:定制一套统一的规范。 子类:遵循父类的统一的规范。 注意:在python中,不会强制限制子类必须遵循父类的规范,所以出现了抽象类。 03.多态的实现? 例子:1.继承父类 # 动物类 class Animal: def eat(self): pass def speak(self): pass # 猪类 class Pig(Animal): def eat(self): print('bia唧...') def speak(self): print('哼哼哼...') # 猫类 class Cat(Animal): def eat(self): print('咬ji 咬ji....') def speak(self): print('喵喵喵...') # 狗类 class Dog(Animal): def eat(self): print('舔 ji 舔ji...') def speak(self): print('汪汪汪...') animal1 = Dog() animal2 =

多态.总结

强颜欢笑 提交于 2019-12-05 22:01:28
对象的多种形态 1.引用多态 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 2.方法多态 创建本类对象时,调用的方法为本类方法 创建子类对象时,调用的方法为子类重写的方法或者继承的方法 抽象类 1、语法定义: 抽象类前使用abstract关键字修饰,则该类为抽象类。 2、应用场景: 在某些情况下,某个父类只知道其子类应该包含怎样的方法,但无法准确知道这些子类如何实现这些方法。 从多个具有相同特征的类中抽象出一个抽象类,以这个抽象类作为子类的模板,从而避免了子类设计的随意性。 抽象类实现接口可以不实现接口方法。抽象类继承其他类,其他类必须有明确(非私有)的构造方法。 3.抽象方法没有方法体以分号结束. 来源: https://my.oschina.net/u/4258973/blog/3134669

每日一题:​面向对象的特征有哪些?

情到浓时终转凉″ 提交于 2019-12-05 20:59:36
问题:面向对象的特征有哪些? 答:封装,继承,多态和抽象。 1. 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 3 种修饰符:public,private 和 protected。每一 种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: 通过隐藏对象的属性来保护对象内部的状态 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展 禁止对象之间的不良交互,提高模块化 2. 继承 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。 3. 多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 4. 抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java 支持创建只暴露接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 来源: oschina 链接: https://my.oschina.net/u/4108008/blog/3137600

每日一题:​面向对象的特征有哪些?

扶醉桌前 提交于 2019-12-05 20:53:49
问题:面向对象的特征有哪些? 答:封装,继承,多态和抽象。 1. 封装 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。在 Java 当中,有 3 种修饰符:public,private 和 protected。每一 种修饰符给其他的位于同一个包或者不同包下面对象赋予了不同的访问权限。 下面列出了使用封装的一些好处: 通过隐藏对象的属性来保护对象内部的状态 提高了代码的可用性和可维护性,因为对象的行为可以被单独的改变或者是扩展 禁止对象之间的不良交互,提高模块化 2. 继承 继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。 3. 多态 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 4. 抽象 抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。Java 支持创建只暴露接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。 来源: oschina 链接: https://my.oschina.net/u/4108008/blog/3137600

[Go] Golang中的面向对象

半城伤御伤魂 提交于 2019-12-05 20:39:25
struct interface 就可以实现面向对象中的继承,封装,多态 继承的演示: Tsh类型继承People类型,并且使用People类型的方法 多态的演示 Tsh类型实现了接口Student,实现了接口定义的方法 完整代码: package main import "fmt" //父类型 type People struct { } func (p *People) echo() { fmt.Println("taoshihan") } //接口 type Student interface { Do() } //子类型,实现了接口,继承了父类型 type Tsh struct { People } func (t Tsh) Do() { fmt.Println("taoshihan do") } func main() { //继承的演示 t := Tsh{People{}} t.echo() //多态的演示 var student Student student = t student.Do() } 来源: https://www.cnblogs.com/taoshihan/p/11945876.html

多态

醉酒当歌 提交于 2019-12-05 19:07:36
1.继承和虚函数 1)没有继承时虚函数表 Base结构,里面有3个函数:Function1、Function2、Function3; 虚表: 2)单继承无函数覆盖 Base结构: Function1、2、3; Sub结构继承Base: Function4、5、6; 虚表: 子类对象的虚表中包含子类和父类的全部虚函数; 3)单继承有函数覆盖 Base: Function1、2、3; Sub继承Base: Function1、2、6; 虚表: 虚表中包含子类中的全部虚函数和父类中没有被覆盖的虚函数; 4)多继承无覆盖 Base1: Function1、2; Base2: Function3、4; Sub继承了Base1和Base2: Function5、6; 虚表: 有两个虚表; 虚表1中有Base1和Sub中的所有虚函数; 虚表2中有Base2中所有的虚函数; Sub结构相对没有虚函数的结构于多了8个字节; 也就是说,有几个虚表结构中就需要保存几个虚表的地址; 5)多继承有覆盖 Base1: Function1、2; Base2: Function3、4; Sub继承Base1和Base2: Function1、3、5; 虚表: 子类对象覆盖了哪个函数,就将覆盖后的函数的地址放在哪个被覆盖函数的父类的虚表中; 子类特有的函数放第一个虚表中; 6)多重继承无覆盖 Base1: