三大特性之类的多态2(抽象类如何进行和实现多态)
八股文如下:
什么是抽象类?
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
与java一样,python也有抽象类的概念。抽象类是一种特殊的类,它只能有抽象方法,不能被实例化,在子类继承抽象类时,不能通过实例化使用其抽象方法,必须实现该方法。
抽象类的作用
抽象类可以实现多个子类中共用的部分,而不需要重复写到实现类中。
从设计角度去看,抽象类是基于类抽象而来的,是实现类的基类。
从实现角度来看,抽象类与普通类的不同之处在于:抽象类中有抽象方法,该类不能被实例化,只能被继承,且实现子类必须继承并实现抽象类的方法。
注:抽象方法不需要写方法体,但并不是不能写。可以写,但是没有用。
抽象类中可以定义属性、类方法、静态方法
继承了抽象类,就必须重写抽象类中的抽象方法,否则无法实例化对象,并抛异常。
应该尽量避免多继承
如果出现多继承,那么对于同名抽象方法,哪个继承类靠前就是实现的哪个类的抽象方法。
这对于抽象方法来说没什么意义。
但是!
由于抽象类不止能写抽象方法,还可以写属性、类方法、静态方法、普通方法,这些方法如果同名,就是按继承顺序来继承和重写的了
大概了解了什么是抽象类之后,我用简单的方法去描述如何进行抽象类的多态!!代码如下:
'''
什么是抽象类?
抽象类是不完整的,它只能用作基类。在面向对象方法中,抽象类主要用来进行类型隐藏和充当全局变量的角色
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。
与java一样,python也有抽象类的概念。抽象类是一种特殊的类,它只能有抽象方法,不能被实例化,在子类继承抽象类时,不能通过实例化使用其抽象方法,必须实现该方法。
抽象类的作用
抽象类可以实现多个子类中共用的部分,而不需要重复写到实现类中。
从设计角度去看,抽象类是基于类抽象而来的,是实现类的基类。
从实现角度来看,抽象类与普通类的不同之处在于:抽象类中有抽象方法,该类不能被实例化,只能被继承,且实现子类必须继承并实现抽象类的方法。
注:抽象方法不需要写方法体,但并不是不能写。可以写,但是没有用。
抽象类中可以定义属性、类方法、静态方法
继承了抽象类,就必须重写抽象类中的抽象方法,否则无法实例化对象,并抛异常。
应该尽量避免多继承
如果出现多继承,那么对于同名抽象方法,哪个继承类靠前就是实现的哪个类的抽象方法。
这对于抽象方法来说没什么意义。
但是!
由于抽象类不止能写抽象方法,还可以写属性、类方法、静态方法、普通方法,这些方法如果同名,就是按继承顺序来继承和重写的了
'''
#定义一个抽象类
class Doucument:
def __init__(self,name):
self.name=name
def show(self):
raise NotImplementedError('Subclass must implement abstract method!!')
#继承抽象类
class Pdf(Doucument):
def show(self):
print('Show pdf contents!')
class Word(Doucument):
def show(self):
print('Show exl contents!!')
print(self.name)
p1=Pdf('联系方式')
p1.show()
w1=Word('成绩单')
#w1.__init__('11')
w1.show()
在这里我定义了一个抽象类 Doucument:中有show方法,但是其子类show方法进行了重构!
#定义一个抽象类
class Doucument:
def __init__(self,name):
self.name=name
def show(self):
raise NotImplementedError('Subclass must implement abstract method!!')
1 、什么是类?
def Dog(name,d_type):{
}
该部分其实就是一个类,类中定义了这些对象的都具备的属性、共同的方法
2、什么是对象?
说简单一点,对象就是实实在在的东西!!---实体
d3=Dog('tiger','泰迪')
d4=Dog('贝贝','柯基')
d3,d4相当于现实世界当中实实在在存在的实体,即就叫做对象!!
3、什么叫做实例化?
说简单一点就是模板调用的过程(类的调用过程)就叫做实例化!!--实例化之后产生的东西就叫做对象!
4、什么是封装?
def Dog(name,d_type):
dog1 = {
'name': name,
'd_type': d_type,
#'attack': 18,
'year': 10
}
if d_type in attack:
Dog["attack"]=attack[d_type]
else:
dog1["attack"]=15
return dog1
假设在这里我创建了一个狗类的方法和一个人类的方法,所谓封装可以简单的理解为:狗类的方法人理论上是不运行人去调用的!
多态和继承我会在后续代码中进行详细讲解!!
类的基本语法:
1、为了编程的规范:python中类首字母应该大写
直接就可以在类中定义属性
像下面这种在类中直接定义的属性,叫做类属性、类变量(是所有对象都可以公共共享的一个属性)
类中的方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
class Dog:
#直接就可以在类中定义属性
# 像下面这种在类中直接定义的属性,叫做类属性、类变量
d_type='泰迪'
def hello(self): #方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
print('Hello!,I am a',self.d_type)
当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象