python多态的三种表现形式_python类的三大特性---多态

本文介绍了Python中的抽象类和多态性。抽象类通过`abc`模块实现,用于定义一组类的共同属性和方法,子类必须实现抽象方法。多态性允许不同类型的对象以相同的方式进行操作,增强了代码的灵活性和可扩展性。
摘要由CSDN通过智能技术生成

抽象类

抽象类的概念:

抽象类是一个特殊的类,它的特殊之处在于只能被继承,不能被实例化。

抽象类的作用:

如果说类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性,

从设计角度去看,如果类是从现实对象抽象而来的,那么抽象类就是基于类抽象而来的。

从实现角度来看,抽象类与普通类的不同之处在于:抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。

如果一组类中有相似的方法,为了方便使用可以使用抽象类将这些相似的方法定义到抽象类中,好像形成了一个接口,统一了这些相似的方法。

import abc #使用abc模块实现抽象类

class All_file(metaclass=abc.ABCMeta): #定义一个抽象类

all_type = "file"@abc.abstractmethod#装饰器的作用是实现抽象方法,无需实现功能

def read(self): #方法在子类中实现

pass@abc.abstractmethoddefwrite(self):pass

class Txt(All_file): #子类继承抽象类,就必须实现抽象类里的read和write方法

def __init__(self, name):

self.name=namedefread(self):print("%s可以被读取" %self.name)defwrite(self):print("%s可以被写入" %self.name)class Sata(All_file): #子类继承抽象类,就必须实现抽象类里的read和write方法

def __init__(self, name):

self.name=namedefread(self):print("%s可以被读取" %self.name)defwrite(self):print("%s可以被写入" %self.name)

txt= Txt("txt")

sata= Sata("sata")

txt.read()

txt.write()

sata.read()

sata.write()

抽象类和接口:

抽象类的本质还是类,指的是一组类的相似性,包括数据属性(如all_type)和函数属性(如read、write),而接口只强调函数属性的相似性。

抽象类是一个介于类和接口直接的一个概念,同时具备类和接口的部分特性,可以用来实现归一化设计

多态和多态性

多态指一类事物的多种形态,他们都有相似的属性或技能

跟抽象类刚好一反,我们抽取类中相似的方法形成一个抽象类,那么这一系列类也正是这个抽象类的不同形态。

class Animal(metaclass=abc.ABCMeta): #动物类

def __init__(self, name):

self.name=name

@abc.abstractmethoddeftalk(self):pass

class People(Animal): #动物类的一种形态 人

def __init__(self, name):

self.name=namedeftalk(self):print("%s 说中国话" %self.name)class Dog(Animal): #动物类的另一种形态 狗

def __init__(self, name):

self.name=namedeftalk(self):print("%s 说汪汪" %self.name)

people= People("people")

dog= Dog("dog")

people.talk()

dog.talk()

多态性:

多态性是指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性

静态多态性:如任何类型都可以用运算符+进行运算

动态多态性:如下

class Animal(metaclass=abc.ABCMeta): #动物类

def __init__(self, name):

self.name=name

@abc.abstractmethoddeftalk(self):pass

class People(Animal): #动物类的一种形态 人

def __init__(self, name):

self.name=namedeftalk(self):print("%s 说中国话" %self.name)class Dog(Animal): #动物类的另一种形态 狗

def __init__(self, name):

self.name=namedeftalk(self):print("%s 说汪汪" %self.name)#更进一步,我们可以定义一个统一的接口来使用

deffunc(obj):

obj.talk()

people= People("people")

dog= Dog("dog")

func(people)

func(dog)

为什么要使用多态性:

1.增加了程序的灵活性

以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

2.增加了程序额可扩展性

通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值